gpt4 book ai didi

sql - 每组生成 n 行

转载 作者:行者123 更新时间:2023-12-02 15:26:34 26 4
gpt4 key购买 nike

众所周知,GROUP BY 每组产生一行。我想每组生成多行。例如,特定用例是为每件商品选择两种最便宜的产品。

对于组中的两个或三个元素来说是微不足道的:

select type, variety, price
from fruits
where price = (select min(price) from fruits as f where f.type = fruits.type)
or price = (select min(price) from fruits as f where f.type = fruits.type
and price > (select min(price) from fruits as f2 where f2.type = fruits.type));

( Select n rows per group in mysql )

但我正在寻找一个可以显示每组 n 行的查询,其中 n 是任意大的。换句话说,每组显示 5 行的查询应该可以转换为每组显示 7 行的查询,只需替换其中的一些常量即可。

我不局限于任何 DBMS,因此我对在任何 DBMS 上运行的任何解决方案都感兴趣。如果它使用一些非标准语法也没关系。

最佳答案

对于任何支持解析函数\窗口函数的数据库,这都比较容易

select *
from (select type,
variety,
price,
rank() over ([partition by something]
order by price) rnk
from fruits) rank_subquery
where rnk <= 3

如果您省略 [partition by something],您将获得前三行。如果您想要每个 type 的前三名,您可以在 rank() 函数中按类型划分

根据您希望如何处理平局,您可能希望使用 dense_rank()row_number() 而不是 rank() .如果两行并列第一,使用 rank,下一行的 rnk 为 3,而它的 rnk 为 2,dense_rank。在这两种情况下,两个并列行的 rnk 都为 1。row_number 会任意给两个并列行之一的 rnk 为 1,并且另一个是 2 的 rnk

关于sql - 每组生成 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30130928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com