加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何在每个id组的列中选择最常用的值?

发布时间:2020-12-12 06:32:34 所属栏目:MsSql教程 来源:网络整理
导读:我有一个SQL表,看起来像这样: user_id | data10 | 60 | 60 | 60 | 10 | 10 | 21 | 51 | 51 | 31 | 31 | 31 | 7 我想编写一个返回两列的查询:一列用于用户ID,另一列用于每个id最常出现的值.在我的示例中,对于user_id 0,最常见的值是6,而对于user_id 1,最常见
我有一个SQL表,看起来像这样:
user_id | data1
0       | 6
0       | 6
0       | 6
0       | 1
0       | 1
0       | 2
1       | 5
1       | 5
1       | 3
1       | 3
1       | 3
1       | 7

我想编写一个返回两列的查询:一列用于用户ID,另一列用于每个id最常出现的值.在我的示例中,对于user_id 0,最常见的值是6,而对于user_id 1,最常见的值是3.我希望它看起来如下所示:

user_id | most_frequent_value
0       | 6
1       | 3

我使用下面的查询来获取最频繁的值,但它针对整个表运行并返回整个表的最常见值,而不是每个id.我需要添加什么才能让它为每个id返回最常用的值?我在想我需要使用子查询,但我不确定如何构造它.

SELECT user_id,data1 AS most_frequent_value
FROM my_table
GROUP BY user_id,data1
ORDER BY COUNT(*) DESC LIMIT 1

解决方法

如果你使用正确的“order by”,那么distinct(user_id)会做同样的工作,因为它需要来自“user_id”分区的数据的1.line. DISTINCT ON是PostgreSQL的专长.
select distinct on (user_id) user_id,most_frequent_value from (
SELECT user_id,data1 AS most_frequent_value,count(*) as _count
FROM my_table
GROUP BY user_id,data1) a
ORDER BY user_id,_count DESC

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读