0

我有下表:

create table client(
   name varchar(50),
   red tinyint(1),
   green tinyint(1),
   blue tinyint(1)
);

我想计算有多少人拥有红色、绿色和蓝色产品。(产品可以同时是红色、绿色和蓝色,或任何一种组合)。我知道我必须做 3 次计数,但我想知道是否有任何类型的查询将其作为输出:

Product type  - Number
red           - 100
green         - 223
blue          - 23

谢谢!

4

1 回答 1

1

它对你有用吗:

SELECT 
COUNT(CASE WHEN red=1 THEN 1 END) as red_cnt,
COUNT(CASE WHEN green=1 THEN 1 END) as green_cnt,
COUNT(CASE WHEN blue=1 THEN 1 END) as blue_cnt
FROM table1 

然后你可以在客户端以你想要的方式显示它。不幸的是,mysql 不支持PIVOTWITH因此在服务器端旋转这样的结果将过于冗长。以您需要的方式生成结果集的另一种方法是使用UNION. : 更新

我刚刚意识到还有另一种选择:

SELECT a.product, 
   CASE a.product 
    WHEN 'Red' THEN b.red_cnt
    WHEN 'Blue' THEN b.blue_cnt
    WHEN 'Green' THEN b.green_cnt
   END as `Number`
  FROM 
   (
     SELECT 'Red' as product
     UNION ALL
     SELECT 'Blue'
     UNION ALL
     SELECT 'Green'
   )a
   LEFT JOIN
   (
     SELECT 
     COUNT(CASE WHEN red=1 THEN 1 END) as red_cnt,
     COUNT(CASE WHEN green=1 THEN 1 END) as green_cnt,
     COUNT(CASE WHEN blue=1 THEN 1 END) as blue_cnt
     FROM table1 
   )b ON (1=1)
于 2013-09-29T00:08:16.340 回答