如何在SQL中通过比较两个MAX()列获取最高销量对应的国家?
解决方案
要实现获取每种饮料销量最高的国家(销量取units_a_sold或units_b_sold中的较大值),可以通过以下两种方式补充SQL语句:
方法一:使用窗口函数(推荐,支持多饮料场景)
这种方法能清晰地对每个饮料的国家销量排名,筛选出排名第一的记录:
SELECT beverage, country FROM ( SELECT beverage, country, -- 计算当前国家该饮料的单列最高销量 GREATEST(units_a_sold, units_b_sold) AS max_unit_sold, -- 按饮料分组,对销量降序排名 RANK() OVER (PARTITION BY beverage ORDER BY GREATEST(units_a_sold, units_b_sold) DESC) AS sales_rank FROM your_table_name -- 替换为实际表名 ) ranked_sales WHERE sales_rank = 1;
逻辑说明
GREATEST(units_a_sold, units_b_sold):提取每个国家对应饮料的两列销量中的较大值RANK() OVER (...):按饮料分组,对每个国家的最大销量降序排名- 外层查询筛选排名为1的记录,即为该饮料销量最高的国家
方法二:使用子查询匹配最大值
如果不支持窗口函数,可以用子查询找出每个饮料的最高销量,再匹配对应的国家:
SELECT t.beverage, t.country FROM your_table_name t -- 替换为实际表名 WHERE GREATEST(t.units_a_sold, t.units_b_sold) = ( SELECT MAX(GREATEST(units_a_sold, units_b_sold)) FROM your_table_name WHERE beverage = t.beverage );
验证示例
针对你提供的数据表,两种方法都会返回预期结果:
| beverage | country |
|---|---|
| fanta | DE |
内容的提问来源于stack exchange,提问作者Luis Guillermo
相关产品推荐
相关产品推荐

