gpt4 book ai didi

sql - 列属性的条件组

转载 作者:行者123 更新时间:2023-11-29 14:06:37 24 4
gpt4 key购买 nike

我有一个包含这些列的表:pkgenderattribute,我想为每个性别选择前 10 个属性。目前我使用两个查询来完成:

SELECT attribute, count(attribute)
FROM tab
WHERE gender=1
GROUP BY attribute
ORDER BY count(attribute) DESC
LIMIT 10

和另一个查询 WHERE gender=0

我可以对一个查询进行此操作,并输出每个性别的前 10 个属性吗

男性属性,计数,女性属性,计数

最佳答案

可以。最简单的方法是使用变量:

SELECT gender, attribute, cnt
FROM (SELECT ag.*,
(@rn := if(@g = gender, @rn + 1,
if(@g := gender, 1, 1)
)
) as seqnum
FROM (SELECT gender, attribute, count(attribute) as cnt
FROM tab
GROUP BY gender, attribute
ORDER BY gender, cnt DESC
) ag CROSS JOIN
(SELECT @rn := 0, @g := -1) params
) ag
WHERE seqnum <= 10;

有了两个性别值,单独的查询可能会更简单。但是,如果您有更多的值(value),那么这种方法也有它的优点。

编辑:

Postgres 中的解决方案要简单得多:

select gender, attribute, cnt
from (select gender, attribute, count(*) as cnt,
row_number() over (partition by gender order by count(*) desc) as seqnum
from tab t
group by gender, attribute
) ga
where seqnum <= 10;

关于sql - 列属性的条件组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37817155/

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