如何从sql中的子查询中获取具有最小值的行?

问题描述 投票:-1回答:1

我有一张桌子-> Saledetail(prodid,Quantity)。我想从该表中获取数量最少的prodid

经过一些资源后,例如:SQL query to select distinct row with minimum value

我写了一个查询'''

select prodid, sum(quantity) as sum
from saledetail
group by prodid

'''

它的输出是**

PRODID  K
102 11
101 5
104 4
106 4
103 2

**

现在为了获得具有k最小值的prodid,我将不得不使用select min(k) from table_name。但是我没有该查询的table_name,因为它是一个子查询。我也尝试给它们起别名,然后出现错误,无法弄清楚。所以,我想知道如何完成我的要求?如果有更好的解决方案,也欢迎您。谢谢

mysql sql database correlated-subquery
1个回答
0
投票

此查询为您提供数量最少的产品:

select prodid, sum(quantity) as sum_quantity
from saledetail
group by prodid
order by sum(quantity)
limit 1;

但是,LIMIT没有tie子句。因此,如果两个或多个产品共享相同的最小总数,则上述查询将任意选择其中一个。

这是获取所有这些产品的简单查询:

select prodid, sum(quantity) as sum_quantity
from saledetail
group by prodid
having sum(quantity) =
(
  select sum(quantity)
  from saledetail
  group by prodid
  order by sum(quantity)
  limit 1
);

从MySQL 8开始,您可以使用窗口函数以便只读取一次表:

select prodid, sum_quantity
from
(
  select 
    prodid,
    sum(quantity) as sum_quantity
    min(sum(quantity)) over () as min_sum_quantity
  from saledetail
  group by prodid
) aggregated
where sum_quantity = min_sum_quantity;
© www.soinside.com 2019 - 2024. All rights reserved.