gpt4 book ai didi

sql - 联合和排序依据

转载 作者:行者123 更新时间:2023-12-03 02:49:57 25 4
gpt4 key购买 nike

考虑一个像这样的表

tbl_ranks
--------------------------------
family_id | item_id | view_count
--------------------------------
1 10 101
1 11 112
1 13 109

2 21 101
2 22 112
2 23 109

3 30 101
3 31 112
3 33 109

4 40 101
4 51 112
4 63 109

5 80 101
5 81 112
5 88 109

我需要生成一个结果集,其中包含按观看次数排序的家庭 ID 子集(例如 1、2、3 和 4)的前两 (2) 行。我想做类似的事情

select top 2 * from tbl_ranks where family_id = 1 order by view_count
union all
select top 2 * from tbl_ranks where family_id = 2 order by view_count
union all
select top 2 * from tbl_ranks where family_id = 3 order by view_count
union all
select top 2 * from tbl_ranks where family_id = 4 order by view_count

但是,当然,order by 在这种方式的 union all 上下文中是无效的。有什么建议么?我知道我可以运行一组 4 个查询,将结果存储到临时表中,然后选择该临时表的内容作为最终结果,但如果可能的话,我宁愿避免使用临时表。

注意:在实际应用中,每个家庭 ID 的记录数是不确定的,并且 view_counts 也不像上面示例中那样固定。

最佳答案

你可以尝试这样的事情

DECLARE @tbl_ranks TABLE(
family_id INT,
item_id INT,
view_count INT
)

INSERT INTO @tbl_ranks SELECT 1,10,101
INSERT INTO @tbl_ranks SELECT 1,11,112
INSERT INTO @tbl_ranks SELECT 1,13,109

INSERT INTO @tbl_ranks SELECT 2,21,101
INSERT INTO @tbl_ranks SELECT 2,22,112
INSERT INTO @tbl_ranks SELECT 2,23,109

INSERT INTO @tbl_ranks SELECT 3,30,101
INSERT INTO @tbl_ranks SELECT 3,31,112
INSERT INTO @tbl_ranks SELECT 3,33,109

INSERT INTO @tbl_ranks SELECT 4,40,101
INSERT INTO @tbl_ranks SELECT 4,51,112
INSERT INTO @tbl_ranks SELECT 4,63,109

INSERT INTO @tbl_ranks SELECT 5,80,101
INSERT INTO @tbl_ranks SELECT 5,81,112
INSERT INTO @tbl_ranks SELECT 5,88,109

SELECT *
FROm (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY family_id ORDER BY view_count DESC) MyOrder
FROM @tbl_ranks
) MyOrders
WHERE MyOrder <= 2

关于sql - 联合和排序依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1882807/

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