在子查询中排名

Rank in subquery

我希望使用下面的 table 按总销售价格报告畅销书: 销售额 table:

seller_id |数量 |价格

| 1 | 2 | 2000 |

| 1 | 1 | 800 |

| 2 | 1 | 800 |

| 3 2 | 2800 |

结果需要是 1 和 3(a table 有 1 列“seller_id”),因为 ID 为 1 和 3 的卖家销售的产品总价最高为 2800

我尝试使用 rank.. 在子查询中编写一个查询,我会得到类似的东西:

SELECT sum(price), rank() over (order by price desc ) 从 销售量 按 seller_id

分组

然后,我需要 select rank=1 的总和(价格),但我不知道怎么写.. 然后,在子查询之外,我只想 select seller_id。 我们如何做到这些?

使用 RANKING 函数根据最高价格检索 seller_id。 RANK() 函数使用 GAP 序列化位置。如果两个值在同一位置,则此值之后的第三个值位置将是 3 而不是 2。

-- MySQL (v5.8)
SELECT t.seller_id, t.total_price
FROM (SELECT seller_id, SUM(price) total_price
      , RANK() OVER (ORDER BY SUM(price) DESC) rank_price
      FROM sales
      GROUP BY seller_id) t
WHERE t.rank_price = 1

DENSE_RANK() 函数在没有 GAP 的情况下序列化位置。如果以后需要top 5价格就更好了

-- MySQL (v5.8)
SELECT t.seller_id, t.total_price
FROM (SELECT seller_id, SUM(price) total_price
      , DENSE_RANK() OVER (ORDER BY SUM(price) DESC) rank_price
      FROM sales
      GROUP BY seller_id) t
WHERE t.rank_price = 1

请检查 url https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=90c756fa6d3ab25914721cfe40df5e9a