MySQL CASE语句,带有直方图的子查询
我正在尝试收集数据以创建直方图。我想创建用户登录系统次数的直方图。我的目标是利用answer中的函数,但如果有更好的方法,我也可以 我的登录表与此类似:MySQL CASE语句,带有直方图的子查询,mysql,sql,Mysql,Sql,我正在尝试收集数据以创建直方图。我想创建用户登录系统次数的直方图。我的目标是利用answer中的函数,但如果有更好的方法,我也可以 我的登录表与此类似: datetime | userid 我的第一步是获取用户登录的次数计数: select count(userid) from logins group by userid 这将返回一个很好的结果集,类似于: 1325 761 4012 1204 662 1841 15 1698 ... 我的问题是,我如何调整它以利用链接答案中的SELEC
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
然而,在我的例子中,WHEN子句中的age是一个子查询,我认为不需要为每个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 case when age between 13
and 17 then '13-17' when age between 18
and 25 then '18-25' else '26+' end
如果您想写一次案例,请执行以下操作:
select AgeGroup,
count(*) as total
from (
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
from MyTable
) t
group by AgeGroup
因此,看起来您希望确定登录次数的范围,在这种情况下,您首先计算每个用户的登录尝试次数,然后将各个次数合并到不同的存储桶中 以下查询将提供登录1-2次、3-4次和4次以上的用户数 工作小提琴: 如果需要根据实际登录计数创建存储桶,请使用SUMtotal_登录而不是COUNTuser_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
请看一下这个代码
SELECT
CASE age
WHEN BETWEEN 13 AND 17 THEN '13-17'
WHEN BETWEEN 18 AND 25 THEN '18-25'
ELSE '26+'
END AS AgeGroup,
COUNT(*) AS total
FROM MyTable
GROUP BY CASE age
WHEN BETWEEN 13 AND 17 THEN '13-17'
WHEN BETWEEN 18 AND 25 THEN '18-25'
ELSE '26+'
END
您希望结果如何?
SELECT
CASE age
WHEN BETWEEN 13 AND 17 THEN '13-17'
WHEN BETWEEN 18 AND 25 THEN '18-25'
ELSE '26+'
END AS AgeGroup,
COUNT(*) AS total
FROM MyTable
GROUP BY CASE age
WHEN BETWEEN 13 AND 17 THEN '13-17'
WHEN BETWEEN 18 AND 25 THEN '18-25'
ELSE '26+'
END