我有两张桌子


查询
供应商报价。


供应商报价表中,同一询价上有多个供应商报价,
我使用以下查询获取每个供应商的最低价格,我获取了最低价格,但供应商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请帮助我

谢谢

最佳答案

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/

10-11 12:20