【问题标题】:Fetch data from same table using two group by in mysql在mysql中使用两个group by从同一个表中获取数据
【发布时间】:2014-10-05 21:27:43
【问题描述】:

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

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 

我需要在条形图中填充此日期。最近几天我对这个查询有点困惑。如果可能的话,请帮助我。 在此先感谢

【问题讨论】:

  • 我经常看到“计数”这个词。使用 MySQL 的聚合 COUNT() 函数,还有 SUM() 是另一个聚合函数。

标签: php mysql codeigniter phpmyadmin


【解决方案1】:
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')

这应该会为您提供所需的结果。

【讨论】:

  • 这会更加低效,因为您要加入 3 个表。
【解决方案2】:

首先你需要extract从日期时间开始的月份并按月分组,然后SUM个人和组自己。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多