我有一些数据,有没有简单的方法?
create table tb_count(
id int not null auto_increment,
col1 enum('yes', 'no'),
col2 enum('yes', 'no'),
col3 enum('yes', 'no'),
col4 enum('yes', 'no'),
primary key(id)
) default charset=utf8;
insert into tb_count values (null, 'yes', 'yes', 'no', 'yes');
insert into tb_count values (null, 'no', 'yes', 'no', 'no');
insert into tb_count values (null, 'no', 'yes', 'no', 'yes');
insert into tb_count values (null, 'no', 'no', 'no', 'no');
select * from tb_count;
# I want to get the following output:
# value col1 col2 col3 col4
# yes 1 3 0 2
# no 3 1 4 2
顺便说一句,我有一个更复杂的方法,我不想使用union all
我的代码
SELECT
'yes' AS 'value',
SUM( CASE WHEN col1 = 'yes' THEN 1 ELSE 0 END ) AS col1,
SUM( CASE WHEN col2 = 'yes' THEN 1 ELSE 0 END ) AS col2,
SUM( CASE WHEN col3 = 'yes' THEN 1 ELSE 0 END ) AS col3,
SUM( CASE WHEN col4 = 'yes' THEN 1 ELSE 0 END ) AS col4
FROM
tb_count
UNION ALL
SELECT
'no' AS 'value',
SUM( CASE WHEN col1 = 'no' THEN 1 ELSE 0 END ) AS col1,
SUM( CASE WHEN col2 = 'no' THEN 1 ELSE 0 END ) AS col2,
SUM( CASE WHEN col3 = 'no' THEN 1 ELSE 0 END ) AS col3,
SUM( CASE WHEN col4 = 'no' THEN 1 ELSE 0 END ) AS col4
FROM
tb_count
我想知道这样做是否是一种好的做法,什么是最好的做法?
最佳答案
这是另一种方法:
SELECT
IF(y.yn=1,'yes','no')
, SUM(y.yn = col1) AS col1
, SUM(y.yn = col2) AS col2
, SUM(y.yn = col3) AS col3
, SUM(y.yn = col4) AS col4
FROM `tb_count` AS t
JOIN (SELECT 1 AS yn UNION ALL SELECT 2) AS y
GROUP BY y.yn;
关于mysql - 在Mysql中使用sql count multiple columns yes and no,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70234690/