吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1148|回复: 9
收起左侧

[讨论] MySQL题目讨论

  [复制链接]
Pandolar 发表于 2021-12-5 18:19
本帖最后由 Pandolar 于 2021-12-5 18:27 编辑
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;

1
-- 求:仅使用1条SQL语句求每列中yes/no出现的次数

# 要求输出的表如下:
# value col1  col2  col3  col4
# yes    1      3    0      2
# no     3      1    4      2

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
shanyang + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

x_kotaku 发表于 2021-12-5 18:45
这有点难度 占个座等高手
魔术蝎 发表于 2021-12-5 18:45
select  'yes' as 'value',ROUND(((char_LENGTH(col1) - char_LENGTH( REPLACE (col1, 'yes', ''))))/3) as 'col1',ROUND(((char_LENGTH(col2) - char_LENGTH( REPLACE (col2, 'yes', ''))))/3) as 'col2',ROUND(((char_LENGTH(col3) - char_LENGTH( REPLACE (col3, 'yes', ''))))/3) as 'col3',ROUND(((char_LENGTH(col4) - char_LENGTH( REPLACE (col4, 'yes', ''))))/3) as 'col4'  from(
select GROUP_CONCAT(col1) col1, GROUP_CONCAT(col2) col2, GROUP_CONCAT(col3) col3, GROUP_CONCAT(col4) col4 from tb_count
) t
union all
select 'no' as 'value',ROUND( ((char_LENGTH(col1) - char_LENGTH( REPLACE (col1, 'no', ''))))/2) as 'col1',ROUND( ((char_LENGTH(col2) - char_LENGTH( REPLACE (col2, 'no', ''))))/2) as 'col2',ROUND(((char_LENGTH(col3) - char_LENGTH( REPLACE (col3, 'no', ''))))/2) as 'col3', ROUND(((char_LENGTH(col4) - char_LENGTH( REPLACE (col4, 'no', ''))))/2) as 'col4'  from(
select GROUP_CONCAT(col1) col1, GROUP_CONCAT(col2) col2, GROUP_CONCAT(col3) col3, GROUP_CONCAT(col4) col4 from tb_count
) t


--------------------------------------
长是长了点,但是还是实现了。效率问题就没考虑了,期待大佬的回复

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
Pandolar + 1 + 1 一起蹲个大大佬

查看全部评分

smldhz 发表于 2021-12-5 19:10
select 'yes'as value,sum(col1='yes')as col1,sum(col2='yes')as col2,sum(col3='yes')as col3,sum(col4='yes')as col4 from tb_count union select 'no',sum(col1='no'),sum(col2='no'),sum(col3='no'),sum(col4='no') from tb_count;

免费评分

参与人数 1热心值 +1 收起 理由
Pandolar + 1 用心讨论,共获提升!

查看全部评分

倾何 发表于 2021-12-5 20:54
[SQL] 纯文本查看 复制代码
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


没想到不用`UNION `之类怎么做
xuanmuluck 发表于 2021-12-6 08:44
这是个变相的二维表,数据库通常处理的是一维表吧
墨晨 发表于 2021-12-6 09:21
SELECT 'yes' ,sum( if(col1='yes',1,0)) col1,sum( if(col2='yes',1,0)) col2,sum( if(col3='yes',1,0)) col3,sum( if(col4='yes',1,0)) col4 FROM tb_count
union all
SELECT 'no',sum( if(col1='no',1,0)) col1,sum( if(col2='no',1,0)) col2,sum( if(col3='no',1,0)) col3,sum( if(col4='no',1,0)) col4 FROM tb_count;
 楼主| Pandolar 发表于 2021-12-6 10:08
xuanmuluck 发表于 2021-12-6 08:44
这是个变相的二维表,数据库通常处理的是一维表吧

所以拿出来一起讨论一下
xuanmuluck 发表于 2021-12-6 10:10
Pandolar 发表于 2021-12-6 10:08
所以拿出来一起讨论一下

其实我曾经也有过这样的想法,后来想想为什么excel很容易做到的事情,sql就很费事呢,想明白了以后就没弄过,原来也有和我同样想法的人
倾何 发表于 2021-12-6 16:54
本帖最后由 倾何 于 2021-12-6 16:57 编辑

[SQL] 纯文本查看 复制代码
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;


//8.0
WITH t(value) AS
(
 SELECT 'yes' UNION ALL
 SELECT 'no'
)
SELECT value,
       SUM( col1 = value ) AS col1,
       SUM( col2 = value ) AS col2,
       SUM( col3 = value ) AS col3,
       SUM( col4 = value ) AS col4 
 FROM tb_count,
      t
GROUP BY value
ORDER BY value DESC

大佬给的




免费评分

参与人数 1吾爱币 +1 收起 理由
Pandolar + 1 我很赞同!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-18 13:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表