在mysql中使用两个group by从同一个表中获取数据

时间:2014-08-12 17:33:33

标签: php mysql codeigniter phpmyadmin

我有一个表名作为顾问,有4个字段(id,name,user_type,创建日期)。我需要编写一个mysql查询来返回每个月的user_type计数。即在我的表中,用户类型是个人,组(I,G)有10个条目。 4个是个人,6个是组。 2月份有2人登记,8月登记。 4月组成员在7月和2月8日注册。所以我的输出是

1)7月份个人登记的数量? 2)7月份的团体登记数量? 3)8月份个人登记的数量? 4)8月份个人登记的数量?

样本表数据

用户表

id | Name | user_type | joined_date

-------------------------------------
1  | john  |  I      |      2014-07-16 00:00:00

2  | james |  G      |      2014-07-11 00:00:00

3  | george|  I      |      2014-08-11 00:00:00

4  | aby   |  I      |      2014-07-11 00:00:00

5  | padma |  G      |      2014-08-11 00:00:00

6  | Mick  |  G      |      2014-08-16 00:00:00

7  | Bony  |  G      |      2014-07-21 00:00:00

8  | Sebas |  I      |      2014-08-11 00:00:00

9  | danie |  G      |      2014-07-11 00:00:00

10 | davi  |  G      |      2014-07-01 00:00:00

预期结果

individual_count  |Group_count| Month              

----------------------------------

  2               | 4         |  July     
  2               | 2         |  August 

我需要在条形图中填充此日期。我对最后几天的查询有点困惑。请尽可能帮助我。 提前致谢

2 个答案:

答案 0 :(得分:2)

SELECT 
    COUNT(i.id) AS individual_count,
    COUNT(g.id) AS Group_count,
    DATE_FORMAT(u.joined_date, '%M') AS `Month`
FROM usertable AS u
LEFT JOIN usertable AS i ON u.id= i.id AND i.user_type = 'I'
LEFT JOIN usertable AS g ON u.id= g.id AND g.user_type = 'G'

GROUP BY DATE_FORMAT(u.joined_date, '%M')

这应该可以为您提供您正在寻找的结果。

答案 1 :(得分:0)

首先,您需要从日期时间开始extract月份,然后逐月,然后SUM个人和群组。