在mysql中创建此查询时遇到一些麻烦。我想我错过了一些明显的东西。
我有一个Users表,其中有一个名为device的列(Android,iOs,Windows是3个可能的值)。我想创建一个报告,告诉我每天注册的用户数量(按日期分组),但是每个设备(每列中的总数)。
我能够创建一个查询,告诉我有多少用户注册为第一列的总数,但无法在接下来的几列中使用子查询。
现在我尝试的工作查询是:
SELECT COUNT(u.userid) 'Total Users', date(u.datecreated) 'Day'
FROM Users
GROUP BY date(u.datecreated)
ORDER BY u.datecreated DESC
这为我生成了一个很好的汇总报告,显示了每天创建的用户数(总数是一列,总数的日期是第二列)
因此,扩展上面的工作查询,我尝试制作一个像这样的子查询,但它不断生成'1'作为新列的结果。
select count(distinct u.userid) 'Total Users',
(select count(u1.userid) from Users u1 where u1.datecreated = u1.datecreated and u.device = 'android' group by u1.datecreated) 'Android Users',
date(u.datecreated) 'Day'
from Users u
group by date(u.datecreated)
order by u.datecreated desc
我怎样才能获得那个内部查询来生成当天的Android用户总数?
答案 0 :(得分:0)
对于每种类型的设备,您都可以使用CASE
声明计算小计。
试试这个:
SELECT
COUNT(u.userid) 'Total Users',
SUM(CASE WHEN device = 'android' THEN 1 END) Android,
SUM(CASE WHEN device = 'iOs' THEN 1 END) iOs,
SUM(CASE WHEN device = 'Windows' THEN 1 END) Windows,
date(u.datecreated) 'Day'
FROM Users
GROUP BY date(u.datecreated)
ORDER BY date(u.datecreated) DESC
答案 1 :(得分:0)
只需在设备上分组,而不仅仅是在日期:
SELECT COUNT(u.userid) 'Total Users', date(u.datecreated) 'Day', device
FROM Users
GROUP BY date(u.datecreated), device
ORDER BY u.datecreated DESC
如果你想要一个单独的行按天保持总数,你可以在末尾添加with rollup修饰符。