SQL查询按表属性计数分组

时间:2013-09-29 00:01:33

标签: mysql sql

我有下表:

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

谢谢!

1 个答案:

答案 0 :(得分: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)