0

我再一次需要你的帮助;)。我有很多数据并且 mysql 请求越来越慢,所以我需要的需求请求我想要在一个命令中分组。

我的示例数据库结构:

|product|opinion (pos/neg)|reason|
__________________________________
|milk   | pos             | good |
|milk   | pos             |fresh |
|chocolate| neg           | old  |
|milk   | neg             | from cow|

所以我需要关于它的所有不同产品(GROUP BY)计数的信息,以及每个产品的 pos 意见计数。我想要这样的输出:

|product|count|pos count|
_________________________
|milk   |  3  | 2       |
|chocolate| 1 |  0      |

我希望我的解释足够好;)或者去工作:我写了两个命令

SELECT COUNT(*) as pos count FROM table WHERE product = "milk" AND opinion = "pos" GROUP BY `opinion`

第二个

SELECT product, COUNT(*) FROM table GROUP BY `product`

我不知道如何加入这两个请求,也许这是不可能的?在我的实际使用代码中,我有额外的类别列,我也在第二个命令中使用 WHERE

4

2 回答 2

3
select product, 
       count(*) as total_count
       sum(
         case when opinion='pos' then 1 
         else 0 end
       ) as pos_count
from the_table
group by product;
于 2013-09-19T11:51:07.967 回答
2
SELECT  product,
        COUNT(*) TotalCount,
        SUM(opinion = 'pos') POSCount
FROM    tableName
GROUP   BY product

SUM(opinion = 'pos')MySQL根据布尔算术结果计算结果总数的特定语法。如果您希望它成为更多 RDBMS 朋友,请使用CASE

SUM(CASE WHEN opinion = 'pos' THEN 1 ELSE 0 END)
于 2013-09-19T11:50:13.437 回答