mysql - Sql,按组获取所有可能的最小值

标签 mysql sql

表格如下:

------------------------------------------------------------------------
    ProductId      ProductType      SupplierId       Price       Date
    10001          Toy1             3                20          2011-10-20
    10001          Toy1             5                23          2011-11-29
    10002          Book1            3                20          2010-12-29
    10004          Book2            4                12          2013-2-11
    10004          Book2            3                25          2014-1-1
    10004          Book2            5                23          2012-9-18

我需要一个查询来获取每个供应商的最低价格产品,因此在上表上运行查询后的结果将是:

----------------------------------
   SupplierId      ProductType
   3               Toy1
   3               Book1
   4               Book2
   5               Toy1
   5               Book2

谢谢。

最佳答案

您可以使用 where 子句中的子查询或聚合和联接来执行此操作:

select t.*
from table t
where t.price = (select min(price)
                 from table t2
                 where t2.supplierid = t.supplierid
                );

编辑:

带有聚合的版本是:

select t.*
from table t join
     (select supplierId, min(price) as minprice
      from table t
      group by supplierId
     ) ts
     on ts.supplierId = t.supplierId and ts.minprice = t.price;

在某些情况下,这可能比以前的版本表现更好。如果性能在较大的表上是一个问题,那么在您的环境中测试这两个表以及正确的索引非常重要。

关于mysql - Sql,按组获取所有可能的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27137943/

相关文章:

mysql - 连接一些字段的 SQL 查询。 (MySql)

mysql - 高效的mysql全文索引

mysql - SQL语句重构

mysql - 使用 where 和Where IN 连接多个表

sql - 如何删除特定数据库特定时间的备份?我也不想给出文件的路径。有人可以指导我吗?

SQL、Firebase 还是其他?

sql - 根据列的最大值从行中选择多列

php - 使用 PHP 将数据从 HTML 表单传递到 MySQL 数据库

mysql - 触发器语句中的语法错误

sql - 删除两个表之间匹配的主键值