首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sql,按组获取所有可能的min值。

Sql,按组获取所有可能的min值。
EN

Stack Overflow用户
提问于 2014-11-25 22:26:25
回答 2查看 57关注 0票数 0

这张桌子是什么样子的:

代码语言:javascript
复制
------------------------------------------------------------------------
    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

我需要一个查询来获得每个供应商的最低价格的产品,所以在上面的表上运行查询后的结果是:

代码语言:javascript
复制
----------------------------------
   SupplierId      ProductType
   3               Toy1
   3               Book1
   4               Book2
   5               Toy1
   5               Book2

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-25 22:30:57

您可以使用where子句或聚合中的子查询和连接来完成此操作:

代码语言:javascript
复制
select t.*
from table t
where t.price = (select min(price)
                 from table t2
                 where t2.supplierid = t.supplierid
                );

编辑:

具有聚合的版本是:

代码语言:javascript
复制
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;

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

票数 3
EN

Stack Overflow用户

发布于 2014-11-25 22:45:39

代码语言:javascript
复制
SELECT a.SupplierID, a.ProductType
FROM table a
WHERE NOT EXISTS (SELECT * FROM table b WHERE b.SupplierID = a.SupplierID and b.Price < a.Price)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27137943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档