在多个字段中获得排名靠前的值

时间:2014-07-11 23:12:21

标签: sql

想象一个包含三个字段的表,一个唯一的用户ID和两个非独特的特征(例如年龄,性别等):user / traitA / traitB

在此表中,我想在单个查询中为每个特征提取最常用的值。如果我们的特质是学年/专业,那么结果可能是:初级/生物学。请注意,这并不意味着生物学中的青少年是最常见的组合,只是每个值本身在其特征中最常见。

这显然可以运行两个单独的查询,按单个字段进行分组并排名和组合。但我的具体问题有更多字段,后续查询的成本很高。

1 个答案:

答案 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