没有数量栏,只有由count()求数量,查询能出来正确结果,怎么样行转列?

MySql 码拜 8年前 (2016-02-18) 1044次浏览
没有行转列的正确SQL
select d.Region,d.MODEL,count(d.WLAN_MAC) as “数量” from deviceinfo as d GROUP BY d.Region,d.MODEL;
本人本人写的的行转列,格式正确,但是数量错误:
select   d.region,
count(if(d.MODEL=”TO301″,d.WLAN_MAC,0)) as “TO301″,
count(if(d.MODEL=”TO302”,d.WLAN_MAC,0)) as “TO302″,
count(if(d.MODEL=”TO303”,d.WLAN_MAC,0)) as “TO303”,
count(*) as “总数”
from deviceinfo as d  GROUP BY d.Region,d.MODEL ;
注意:没有没有数量那一栏,所以只能用count,然而count求数量并没有求出分组后的正确值,求高手献上高招。折磨两天了。不行转列查询出的都是正确的,但是效果不对。
解决方案

10

select   d.region,
count(CASE d.MODEL WHEN "TO301" THEN 1 END) as "TO301",
count(CASE d.MODEL WHEN "TO302" THEN 1 END) as "TO302",
count(CASE d.MODEL WHEN "TO303" THEN 1 END) as "TO303",
count(*) as "总数"
   from deviceinfo as d  GROUP BY d.Region;

10

这里要注意的是 count(0) 和 count(1) 和 count(*)  是一样的 。
原因是count只要字段值不是null,那么就是1,只有在null的时候,count出来的值才是0.
假如你换成sum 就对了。

20

   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx … 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明没有数量栏,只有由count()求数量,查询能出来正确结果,怎么样行转列?
喜欢 (0)
[1034331897@qq.com]
分享 (0)