[英]Multiple counts in one table UNINTENTIONALLY summing columns in rows
I'm trying to get the number of hits for each day during a break to all show up in one table. 我正试图获取休息期间每一天的点击数,以便全部显示在一张桌子中。
SELECT module, COUNT( * )
FROM mdl_log AS l
WHERE (FROM_UNIXTIME( l.`time` ) BETWEEN '2014-12-16 00:00:00' AND '2014-12-17 00:00:00')
GROUP BY module
Gives me exactly what I need for one day (the 16th) 给我确切的一天(16日)所需的东西
module Count(*)
admin 11
assign 1
course 20
outcome 2
user 3
But when I try to get multiple days in the same table it give me a sum of the column in each row. 但是,当我尝试在同一张表中获得多天时,会给我每一行的总和。
SELECT module
,(SELECT COUNT( * )
FROM mdl_log as l
WHERE (FROM_UNIXTIME( l.`time` ) BETWEEN '2014-12-12 00:00:00' AND '2014-12-13 00:00:00')
) AS "12/12/2014"
,(SELECT COUNT( * )
FROM mdl_log AS l
WHERE (FROM_UNIXTIME( l.`time` ) BETWEEN '2014-12-16 00:00:00' AND '2014-12-17 00:00:00')
) AS "12/16/14"
FROM mdl_log
group by module
This... 这个...
module 12/12/14 12/16/14
admin 1 37
assign 1 37
calendar 1 37
course 1 37
forum 1 37
grade 1 37
hsuforum 1 37
library 1 37
login 1 37
lti 1 37
message 1 37
outcome 1 37
question 1 37
quiz 1 37
role 1 37
url 1 37
user 1 37
webservice 1 37
workshop 1 37
Can you give me any advice on how to get this so it shows up how I want it? 您能给我什么建议,以显示我想要的方式吗? eg 例如
module 12/12/14 12/16/14
admin 1 11
assign 0 1
user 0 3
etc. 等等
Apply the date criterion inside the count
function: 在count
函数中应用日期条件:
SELECT module,
COUNT(IF(FROM_UNIXTIME( l.`time` ) BETWEEN '2014-12-12 00:00:00' AND '2014-12-13 00:00:00', 1, NULL) AS "12/12/2014",
COUNT(IF(FROM_UNIXTIME( l.`time` ) BETWEEN '2014-12-16 00:00:00' AND '2014-12-17 00:00:00', 1, NULL) AS "12/16/2014"
FROM mdl_log
group by module
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.