我有以下SQL表:

Country ProductID Price
US 1 10
US 2 20
GB 3 25
GB 4 40
US 1 10
US 1 10
DE 2 20
DE 2 20

我希望看到两个最赚钱的(按价格总和)每"Country"的"ProductID"(按每"Country"的总和排序)如下:

Country ProductID Sum
US 4 40
US 1 30
GB 4 40
GB 3 25
DE 2 20

我怎么才能做到这一点呢?

推荐答案

我们可以在这里将RANK与按国家/地区和产品进行的汇总结合使用:

WITH cte AS (
    SELECT Country, ProductID, SUM(Price) AS Sum,
           RANK() OVER (PARTITION BY Country ORDER BY SUM(Price) DESC) rnk
    FROM yourTable
    GROUP BY Country, ProductID
)

SELECT Country, ProductID, Sum
FROM cte
WHERE rnk <= 2
ORDER BY Country, rnk;

Sql相关问答推荐

错误LOS-00302:在Oracle中使用自定义类型时必须声明DBA_PICKLER组件

如何将多个 Select 查询从一个表中组合出来

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

Select 最大值,但当并列时,从其他列 Select 最大值

PostgreSQL:使用JSONB中的字段使用jsonb_to_Records()填充记录

通过之前的连接-这是Oracle的错误吗?

SQL按日期分组字段和如果日期匹配则求和

在xml.Modify方法中使用子字符串和可能的替代方法

从结果SQL查询中排除空值

SQL数据库规范化与数据插入

删除所有订单中可用的重复值

Proc SQL Select Distinct SAS

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

PostgreSQL:从多个字段收集特定指标的最后一个条目

如何在sparksql查询中使用日期值?

SQL 按 id 运行总计并受条件限制(在窗口上)

Clob 问题 - 将 clob 列拆分为多行

在给定列中具有特定值的行与 SQL 中的总行数的比率

根据开始/结束标记将 GROUP_ID 分配给行

如何根据 ID 和指标从 2 个表中找到不同的值?