从同一个表中选择一列(多行)5次,并在where子句中使用不同的日期

时间:2016-09-04 10:34:39

标签: pivot mariadb heidisql

数据库每天记录所有用户活动。我正在尝试编译摘要报告以显示每个用户每天的操作总数。问题是我想将结果堆叠在一起。我已经提到了以下stackoverflow问题。

mysql Select one column twice from the same table with different dates in the where clause

Select two columns from same table with different WHERE conditions

但我仍然继续得到"子查询返回多行错误#1242"。所有帮助表示赞赏。谢谢。

这是我的查询,仅开始2天。

  SELECT LOGGEDIN_USER AS EnquiryHero, 

  ( SELECT COUNT(user_id) from applications 
  DATE_TIME like "2016-08-24%" group by user_id ) as Day1, 

  ( SELECT COUNT(user_id)from applications 
  WHERE DATE_TIME like "2016-08-25%" group by user_id ) as Day2, 

  from applications WHERE DATE_TIME like "2016-08-24%" group by user_id;

-

SELECT user_id, 
( SUM( IF( the_day ='2016-08-24', ct, 0 ))) AS 2016-08-24, 
( SUM( IF( the_day ='2016-08-25', ct, 0 ))) AS 2016-08-25, 
( SUM( IF( the_day ='2016-08-26', ct, 0 ))) AS 2016-08-26, 
( SUM( IF( the_day ='2016-08-27', ct, 0 ))) AS 2016-08-27, 

FROM ( select user_id, DATE(date_time) AS the_day, loggedin_user, COUNT(*) AS ct      
FROM applications GROUP BY 1,2 ) AS x 
GROUP BY user_id;

1 个答案:

答案 0 :(得分:0)

首先关注获取数据;然后专注于"旋转"数据。

SELECT user_id,
       DATE(`date_time`) AS the_day,
       COUNT(*) AS ct
    FROM applications
    GROUP BY 1, 2;

看看是否能提供所需的数据;然后看看如何" pivot"。查看我添加的额外标签。

然后转动

SELECT user_id,
       (SUM(IF(the_day = '2016-08-24', ct, 0) AS '2016-08-24',
       (SUM(IF(the_day = '2016-08-25', ct, 0) AS '2016-08-25',
       (SUM(IF(the_day = '2016-08-26', ct, 0) AS '2016-08-26',
       (SUM(IF(the_day = '2016-08-27', ct, 0) AS '2016-08-27',
       ...
    FROM (
             the query above
         ) AS x
    GROUP BY user_id;