如何在连接3个表后使用max函数进行sum查询

06odsfpq  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(308)
SELECT  s.seg_name, p.category,  SUM(t.item_qty * t.item_price) revenue
FROM segments s 
JOIN transactions t 
ON s.cust_id = t.cust_id
JOIN products p 
ON p.prod_id = t.prod_id
WHERE s.active_flag = 'Y' 
GROUP BY s.seg_name, p.category

我想使用max函数或其他函数根据查询中给定的组列选择最高收入

e4yzc0pl

e4yzc0pl1#

理解你的问题的方法不止一种。
如果要在结果集中的第一行,请使用 ORDER BY 以及 LIMIT :

SELECT  s.seg_name, p.category,  SUM(t.item_qty * t.item_price) revenue
FROM segments s 
JOIN transactions t  ON s.cust_id = t.cust_id
JOIN products p  ON p.prod_id = t.prod_id
WHERE s.active_flag = 'Y' 
GROUP BY s.seg_name, p.category
ORDER BY revenue DESC
LIMIT 1

另一方面,如果您想保留所有行并添加一列来显示整个数据集的最高收入,那么您可以使用窗口函数(仅在mysql 8.0中提供):

SELECT  
    s.seg_name, 
    p.category,  
    SUM(t.item_qty * t.item_price) revenue,
    MAX(SUM(t.item_qty * t.item_price)) OVER() max_revenue
FROM segments s 
JOIN transactions t  ON s.cust_id = t.cust_id
JOIN products p  ON p.prod_id = t.prod_id
WHERE s.active_flag = 'Y' 
GROUP BY s.seg_name, p.category

相关问题