php - 具有供应商名称的同一商品的多个供应商的最低价格

标签 php mysql

我有两张 table

  1. 询问
  2. 供应商报价。

在供应商报价表中,同一询价有多个供应商报价, 我使用以下查询来获取每个供应商的最低价格,我得到了最低价格,但供应商 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)是错误的,如下图所示。所以请帮助我 enter image description here 谢谢

最佳答案

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/

相关文章:

java - Android ODK - 如何在文件服务器中存储图像?

php - 使用 SQL 选择语句

mysql - MySQL 和 MSSQL 之间的分布式事务

c# - Linux后台进程

javascript - 使用 html2canvas 的屏幕截图需要在文件夹中另存为 psd

php - 如何计算unix时间戳之间的时间差?

php - htaccess RewriteRule url 友好搜索

java.sql.SQLException : After end of result set in mysql 异常

独立 JAVA 应用程序中的 MySql 池数据源(无 J2EE 容器、无 JNDI、无 TOMCAT 等)

php - 生产服务器上的 Laravel 5.2 TokenMisMatchException