gpt4 book ai didi

带有直方图子查询的 MySQL CASE 语句

转载 作者:行者123 更新时间:2023-11-29 10:58:10 32 4
gpt4 key购买 nike

我正在尝试收集数据来创建直方图。我想创建用户登录系统次数的直方图。我的目标是利用 this 中的功能答案,但如果有更好的方法,我也没关系。

我的登录表与此类似:

datetime | userid

我的第一步是获取用户登录的次数:

select count(userid) from logins group by userid

这会返回一个很好的结果集,类似于:

1325
761
4012
1204
662
1841
15
1698
...

我的问题是,我该如何调整它以利用 SELECT CASE WHEN链接答案中的方法。该代码如下所示:

SELECT CASE WHEN age BETWEEN 13 AND 17 THEN '13-17' 
WHEN age BETWEEN 18 AND 25 THEN '18-25'
ELSE '26+' END AS AgeGroup,
COUNT(*) AS total
FROM MyTable
GROUP BY AgeGroup

但就我而言,ageWHEN子句,是一个子查询,我认为不需要为每个 WHEN 运行。有效利用这些垃圾箱中必须使用的计数的方法是什么?

最佳答案

看起来您正在寻找登录次数范围,在这种情况下,您首先计算每个用户的登录尝试次数,然后将各个计数合并到不同的存储桶中。

以下查询将为您提供登录 1-2 次、3-4 次 次的用户数 4+ 次。

SELECT CASE WHEN total_logins BETWEEN 1 AND 2 THEN '1-2' 
WHEN total_logins BETWEEN 3 AND 4 THEN '3-4'
ELSE '4+'
END AS LoginGroup,
COUNT(userid) AS total
FROM (
SELECT userid, COUNT(*) AS total_logins
FROM login
GROUP BY userid
) t
GROUP BY LoginGroup

工作 fiddle :http://sqlfiddle.com/#!9/a66396/2

<小时/>

如果您需要根据实际登录计数创建存储桶,请使用 SUM(total_logins) 而不是 COUNT(user_id),如下面的查询:

SELECT CASE WHEN total_logins BETWEEN 1 AND 2 THEN '1-2' 
WHEN total_logins BETWEEN 3 AND 4 THEN '3-4'
ELSE '4+'
END AS LoginGroup,
SUM(total_logins) AS total
FROM (
SELECT userid, COUNT(*) AS total_logins
FROM login
GROUP BY userid
) t
GROUP BY LoginGroup

关于带有直方图子查询的 MySQL CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42710521/

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