考虑下表
tweets
---------------------------------
tweet_id nyse_date class type
---------------------------------
1 2011-03-12 2 0
2 2011-03-12 1 1
3 2011-03-12 1 0
4 2011-03-12 1 0
5 2011-03-12 0 0
6 2011-03-12 1 0
7 2011-03-12 3 2
8 2011-03-12 3 0
每条推文都分配了一个'class',它是1,2或3,'type'是0,1或2.我想概述每个类和类型中的推文数量,如下:
nyse_date class1 class2 class3 type0 type1 type2
-------------------------------------------------------
2011-03-12 3 1 2 6 1 1
我开始使用以下查询(按日期分组,因为真实表有许多不同的日期):
SELECT
nyse_date,
COUNT(class) AS class1 FROM tweets WHERE class = 1,
COUNT(class) AS class2 FROM tweets WHERE class = 2
GROUP BY
nyse_date ASC
预期产量为
nyse_date class1 class2
--------------------------
2011-03-12 3 1
但我收到了错误。我相信这与我每次查询只能使用一个WHERE子句(我使用的是2)这一事实有关,但我不知道替代方案是什么。你呢?
非常感谢任何帮助: - )
答案 0 :(得分:6)
试试这个:
SELECT
nyse_date,
SUM(class = 1) AS class1,
SUM(class = 2) AS class2,
SUM(class = 3) AS class3
FROM
tweets
GROUP BY
nyse_date ASC
class = 1
是一个布尔表达式,可以评估为TRUE
或FALSE
。 TRUE
等于1
。因此,使用SUM
实际上意味着“计算条件成立的所有行”
答案 1 :(得分:0)
在MySql中使用GROUP_CONCAT聚合函数:
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
答案 2 :(得分:0)
这有用吗?
SELECT nyse_date, SUM( IF( class =1, 1, 0 ) ) AS class1, SUM( IF( class =2, 1, 0 ) ) AS class2
FROM tweets
GROUP BY nyse_date