我有一个表,其中存储的标签如下友谊
id | userid | friendid | tag
1 123 124 a
2 123 125 b
3 211 212 c
4 213 214 d
5 215 216 e
现在,我想得到人们给他们的朋友设置标签的频率的百分比。比如用户123,他给2个用户设置了2个标签,用户211/213/215他们只设置了一次标签。
我试过查询
SELECT "userid", COUNT(*) as frequency
FROM "tag"
group by "tag"`
我得到的结果是
userid | frequency
123 2
211 1
215 1
但是如何得到结果的百分位数呢?
我尝试了几次查询,但无法得到结果。
1条答案
按热度按时间qf9go6mv1#
如果您使用的是MySQL 8.0+,它增加了window function支持,您可以使用窗口函数在几个步骤中获得结果。
步骤1.按用户标识分组并计算每个用户标识的频率,
第2步。使用窗口函数按频率对用户进行排名,计算每个排名中我们有多少用户。
步骤3.使用窗口函数计算每个等级的百分位值。
步骤4.将用户频率与排名百分位值连接起来,并按rank_num对它们进行排序,以获得您需要的结果。
下面是查询(tested in MySQL 8.0):
| 用户识别码|频率|百分位数|
| - ------|- ------|- ------|
| 一百二十三|第二章|0.2500|
| 二一一|1个|1万|
| 二一三|1个|1万|
| 二一五|1个|1万|