我有下表:
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
谢谢!
答案 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不支持PIVOT
或WITH
,因此在服务器端转换此类结果将过于冗长。以您需要的方式生成结果集的另一种方法是使用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)