Mysql多次计数在一个查询中

时间:2011-03-19 16:52:24

标签: mysql sql aggregate-functions

如何使用不同的查询条件计算一个表中两列的记录?

表格如下:

   user_id  |   date     | status
------------------------------
      1     | 2011-01-02 |   1
      2     | 2011-01-03 |   1
      3     | 2011-01-02 |   0
      4     | 2011-01-03 |   1
      1     | 2011-01-02 |   1

我想在一个查询中计算两个值。第一个是按状态的user_id组的编号,第二个是按日期的user_id组的计数。

我该怎么做?

2 个答案:

答案 0 :(得分:4)

您不能在同一查询中使用不同的GROUP BY子句 - 每个计数都必须位于独立查询中。

但是您可以使用子选择(SELECT子句中的子查询)在单个查询/结果集中返回输出:

   SELECT COUNT(a.user_id) AS numUsersPerStatus,
          (SELECT COUNT(b.user_id)
             FROM YOUR_TABLE b
         GROUP BY b.date) AS numUsersPerDate
    FROM YOUR_TABLE a
GROUP BY a.status

答案 1 :(得分:0)

您应该使用两个查询。使用单个查询执行此操作没有任何优势。

如果真的想要这样做,你可以试试这个:

SELECT 'date' AS grptype, date AS grp, COUNT(DISTINCT user_id) AS cnt
FROM yourtable
GROUP BY date
UNION ALL
SELECT 'status' AS grptype, status AS grp, COUNT(DISTINCT user_id) AS cnt
FROM yourtable
GROUP BY status

结果:

grptype    grp         cnt
date       2011-01-02  2  
date       2011-01-03  2  
status     0           1  
status     1           3  

但是我强烈建议不要这样做。您需要两个不同且不相关的结果集,因此您应该使用两个单独的查询。