我有两张桌子
在供应商报价单中,同一询价中有多个供应商报价, 我使用以下查询来获得每个供应商的最低价格,我得到最低价格,但有供应商ID(s_id)的问题。
SELECT E.enq_detail_id,E.modelno,
E.qty,min(S.us_dollor_per1000) as minimum,
S.s_id
FROM enquiry_details as E
LEFT OUTER JOIN supplier_quotation as S
ON E.enq_detail_id=S.enq_detail_id
WHERE E.enq_id=15
GROUP BY s.enq_detail_id`
我得到的最小值是可以的,但是S.s_id(供应商ID)错误,如下图所示screenshot.so请帮帮我 感谢
答案 0 :(得分:0)
MySQL允许您选择GROUP BY
中未包含的非聚合字段。在这种情况下,结果是不确定的。
您编写的查询就是这种情况,需要在GROUP
BY子句中包含供应商ID。
这是一个很好的链接,用一些有用的例子来解释这个问题: http://www.dbasquare.com/2012/05/15/mysql-mistakes-do-you-use-group-by-correctly/
使用Aggregate查询,我确保查询的可读性和正确性的方法是将聚合查询与使用子查询所需的任何其他查询分开。
这是两个示例查询。一些列名称与原始问题不完全匹配,但大致正确。
1)为特定查询选择所有供应商的最佳报价
SELECT *
FROM enquiry_details E
LEFT OUTER JOIN
(
SELECT enq_detail_id,
supplier_id,
MIN(us_dollar_per1000)
FROM supplier_quotation
WHERE enq_detail_id = 1
GROUP BY enq_detail_id, supplier_id
) best_quotes
ON best_quotes.enq_detail_id = E.id
WHERE E.`id` = 1
2)为特定查询选择所有供应商的最佳报价
SELECT *
FROM enquiry_details E
LEFT OUTER JOIN
(
SELECT enq_detail_id,
MIN(us_dollar_per1000)
FROM supplier_quotation
WHERE enq_detail_id = 1
GROUP BY enq_detail_id
) best_quotes
ON best_quotes.enq_detail_id = E.id
WHERE E.`id` = 1