3

考虑下表

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

每条推文都分配了一个“类”,它是 1、2 或 3 和一个“类型”,即 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 个)这一事实有关,但我不知道替代方案是什么。你?

任何帮助是极大的赞赏 :-)

4

3 回答 3

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

Theclass = 1是一个布尔表达式,其值为TRUEor FALSE。ATRUE等于1。因此,使用SUM实际上意味着“计算条件成立的所有行”

于 2012-07-14T13:06:55.497 回答
0

在 MySql 中使用 GROUP_CONCAT 聚合函数:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

于 2012-07-14T13:04:24.843 回答
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
于 2012-07-14T13:19:09.397 回答