1不知道哪看的了
查找数据库列转行的时候,不知道从哪看见了这么一个题目,还说是阿里的。
一个表一千个列值为true和false,写sql 查询 有300个列值为true的行。
2想法
第一想法是我靠,还真没想过,数据库函数COUNT,MAX啥的都是为列为单位的,不愧是阿里。
于是想了以下解法,用CONCAT连接一行所有列的值,然后用REPLACE函数用空白替换掉FALSE,判断剩下字符串的长度,
因为剩下的字符都是true,必然是4的倍数,300个true就是1200,所以只要剩下的字符长度为1200就是我们要的结果。
3动手实验
1000列太多了,我么把题目改成一个表9列,值为true和false,写sql 查询 有3个列值为true的行。
DROP TABLE IF EXISTS `tb_score`;
CREATE TABLE `tb_score` (
`v1` int(11) NOT NULL AUTO_INCREMENT,
`v2` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`v3` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`v4` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`v5` varchar(20) CHARACTER SET utf8 COLLATE utf8_gen