我有两张 table
- 询问
- 供应商报价。
在供应商报价表中,同一询价有多个供应商报价, 我使用以下查询来获取每个供应商的最低价格,我得到了最低价格,但供应商 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)是错误的,如下图所示。所以请帮助我 谢谢
最佳答案
MySQL 允许您选择未包含在GROUP BY
中的非聚合字段。在这种情况下,结果是不确定的。
您编写的查询就是这种情况,需要在 GROUP
BY 子句中包含供应商 ID。
这是一个很好的链接,通过一些有效的示例解释了这个问题: http://www.dbasquare.com/2012/05/15/mysql-mistakes-do-you-use-group-by-correctly/
对于聚合查询,我确保查询可读且正确的方法是使用子查询将聚合查询与您需要的任何其他查询分开。
这里有两个示例查询。一些列名称与原始问题不太匹配,但大致正确。
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
关于php - 具有供应商名称的同一商品的多个供应商的最低价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720826/