如何使用不同的查询条件计算一个表中两列的记录?
表格如下:
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组的计数。
我该怎么做?
答案 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
但是我强烈建议不要这样做。您需要两个不同且不相关的结果集,因此您应该使用两个单独的查询。