MySQL:如何从同一个表中的字段名称中选择COUNT两个字段名称

时间:2013-09-17 04:39:54

标签: mysql

情景:我想创建一个查询,该查询可以返回来自同一列但标准不同的两个或多个字段,以便我可以对数据进行计数。

SQL:

SELECT
       FROM_UNIXTIME(news_date, '%Y-%m-%d') AS `DATE`,
       COUNT(news_slant=1) AS `Neutral`,
       COUNT(news_slant=2) AS `Positive`,
       COUNT(news_slant=3) AS `Negative`
FROM tbl_news
GROUP BY `news_date`
ORDER BY `news_date`

3 个答案:

答案 0 :(得分:1)

case内使用count

SELECT
FROM_UNIXTIME(news_date, '%Y-%m-%d') AS `DATE`,
COUNT(case news_slant when 1 then 1 else null end) AS `Neutral`,
COUNT(case news_slant when 2 then 1 else null end) AS `Positive`,
COUNT(case news_slant when 3 then 1 else null end) AS `Negative`
FROM tbl_news
GROUP BY `news_date`
ORDER BY `news_date`

答案 1 :(得分:1)

使用案例陈述:

SELECT FROM_UNIXTIME(news_date, '%Y-%m-%d') AS `DATE`,
    COUNT(CASE WHEN news_slant=1 THEN 1 ELSE null END) AS Neutral,
    COUNT(CASE WHEN news_slant=2 THEN 1 ELSE null END) AS Positive,
    COUNT(CASE WHEN news_slant=3 THEN 1 ELSE null END) AS Negative ,
FROM MyTable
GROUP BY news_date
ORDER BY news_date

答案 2 :(得分:0)

您可以使用标准IF子句。 COUNT()只计算非空值。

SELECT 
FROM_UNIXTIME(news_date, '%Y-%m-%d') AS DATE, 
COUNT(IF(news_slant=1,1,NULL)) AS Neutral, 
COUNT(IF(news_slant=2,1,NULL)) AS Positive, 
COUNT(IF(news_slant=3,1,NULL)) AS Negative 
FROM tbl_news 
GROUP BY news_date 
ORDER BY news_date
相关问题