mysql - 在Mysql中使用sql count multiple columns yes and no

标签 mysql sql mysql-5.7 mysql-8.0

我有一些数据,有没有简单的方法?

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;

enter image description here

# 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/

相关文章:

mysql - 如何在 MySQL 5.7 中的 JSON 数组中获取唯一/不同的元素

mysql - 从所有数据库的查询结果中获取顶部记录

sql - 更新触发器如何删除旧记录

mysql - 如果 jdbc.queryForObject 不返回行,如何处理

mysql - 如何将表拆分为 block 并选择每个 block 的 AVG

mysql - MySQL 远程时缓存如何工作?

php - 将结果集添加到现有结果集

php - 无法显示mysql的数据

mysql - 如何检查部署的应用程序是否可以访问 mysql、rabbitmq 等 Kubernetes 服务

sql - 使用 SQL 将多个字段连接成一个字段