如何从一个MySQL列输出多个列?
考虑下表如何从一个MySQL列输出多个列?,mysql,Mysql,考虑下表 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 20
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
每个tweet都分配了一个“类”,该类为1、2或3,而“类型”为0、1或2。我想对每个类别和类型的推文数量进行概述,如下所示:
nyse_date class1 class2 class3 type0 type1 type2
-------------------------------------------------------
2011-03-12 3 1 2 6 1 1
我从以下查询开始(按日期分组,因为实际表有许多不同的日期):
预期产出为
nyse_date class1 class2
--------------------------
2011-03-12 3 1
但我却犯了一个错误。我相信这与这样一个事实有关,即每个查询只能使用一个WHERE子句(我使用的是2),但我不知道替代方法是什么。你知道吗
非常感谢您的帮助:-)在MySql中使用GROUP\u CONCAT聚合函数: 试试这个:
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
。ATRUE
等于1
。因此,使用SUM
实际上意味着“计算条件适用的所有行”这是否有效
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
这真是太棒了,谢谢:-)使用这种技术,是否也可以计算类1中类型为0的tweet?所以基本上,
…和(type=0和class=1)是type0class1
?确实如此。开始玩吧!
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