想象一个包含三个字段的表,一个唯一的用户ID和两个非独特的特征(例如年龄,性别等):user / traitA / traitB
在此表中,我想在单个查询中为每个特征提取最常用的值。如果我们的特质是学年/专业,那么结果可能是:初级/生物学。请注意,这并不意味着生物学中的青少年是最常见的组合,只是每个值本身在其特征中最常见。
这显然可以运行两个单独的查询,按单个字段进行分组并排名和组合。但我的具体问题有更多字段,后续查询的成本很高。
答案 0 :(得分:1)
选择单个最常见的特征:
选择年龄 FROM table_name GROUP BY年龄 按COUNT(*)DESC排序 限制1
要从多列中选择最常见的值,此查询在Postgre中起作用:
SELECT DISTINCT
FIRST_VALUE(age) OVER (ORDER BY count1 DESC) AS top1,
FIRST_VALUE(sex) OVER (ORDER BY count2 DESC) AS top2
FROM (
SELECT age,
sex,
COUNT(age) OVER (PARTITION BY age) AS count1,
COUNT(sex) OVER (PARTITION BY sex) AS count2
FROM some_table
) some_table