机柜表:network_cabinets(ID int,COMP_LOCA_ID int,HEIGHT int,USE_HEIGHT int)
机房表:computer_location(ID int,NAME varchar)
其中,COMP_LOCA_ID是机房表的ID,HEIGHT是机柜的高度,USE_HEIGHT是已经使用的高度
现在要统计每个机房的机柜总数、未使用机柜总数(即已使用高度为空或等于0)、
未满机柜数(即已使用高度不为空并且大于0,并且高度-已使用高度>0)
已满机柜数(即已使用高度不为空并且大于0,并且高度=已使用高度)
说明:有的机房没有机柜,统计小项不存在的计0显示效果如下:
机房名称 机柜总计 未使用机柜数 未满机柜数 已满机柜数北京中电华通工体机房 6 2 4 0
北京联通亦庄机房 42 0 32 10
香港PCCWIDC机房 0 0 0 0
广州电信七星岗机房 116 46 14 56
机房表:computer_location(ID int,NAME varchar)
其中,COMP_LOCA_ID是机房表的ID,HEIGHT是机柜的高度,USE_HEIGHT是已经使用的高度
现在要统计每个机房的机柜总数、未使用机柜总数(即已使用高度为空或等于0)、
未满机柜数(即已使用高度不为空并且大于0,并且高度-已使用高度>0)
已满机柜数(即已使用高度不为空并且大于0,并且高度=已使用高度)
说明:有的机房没有机柜,统计小项不存在的计0显示效果如下:
机房名称 机柜总计 未使用机柜数 未满机柜数 已满机柜数北京中电华通工体机房 6 2 4 0
北京联通亦庄机房 42 0 32 10
香港PCCWIDC机房 0 0 0 0
广州电信七星岗机房 116 46 14 56
解决方案 »
- 求这样一个mysql的查询语句
- 求助:mysql超大数据查询效率问题解决方案。
- MySql中如何判断数据库是否存在的代码?
- 怎么没人理我啊!!希望 insert 语句执行的返回值是所插入记录的key字段,可以怎样实现? 望高手指点
- mysql和struts写的java程序,插入时乱码,太头疼了。有知道怎么做的谢谢给说一声。
- 为什么我在应用程序中无法连接远程MySQL???
- 求一段查询语句
- 怎么样根据生日选择年龄(段)mysql TO_DAYS(NOW()) - TO_DAYS(date_col)<= 30返回天数 怎样返回年
- mysql按年、月分开的统计sql语句如何写
- mysql显示一个月的数据,没有数据的置为空
- 怎么将小数表示成百分比(mysql)
- 一个日期比较的问题
count(*) as 机柜总计,
sum(if(r.USE_HEIGHT is null or r.USE_HEIGHT=0,1,0)) as 未使用机柜数,
sum(if(r.USE_HEIGHT>0 and r.USE_HEIGHT<r.HEIGHT,1,0)) as 未满机柜数,
sum(if(r.USE_HEIGHT>=r.HEIGHT,1,0)) as 已满机柜数
from network_cabinets r,computer_location l
where r.COMP_LOCA_ID=l.ID
group by l.NAME
select a.name,count(*) as 机柜总计,sum(if(ifnull(USE_HEIGHT,0)=0,1,0)) as 未使用机柜数 ,
sum(if(ifnull(USE_HEIGHT,0)>0 and HEIGHT-USE_HEIGHT>0,1,0)) as 未满机柜数,
sum(if(ifnull(USE_HEIGHT,0)>0 and HEIGHT=USE_HEIGHT,1,0)) as 已满机柜数from computer_locatio a left join network_cabinets b on a.id=b.COMP_LOCA_ID
group by a.name
香港PCCWIDC机房 0 0 0 0 如果要显示这个,则如下:select l.NAME,
count(*) as '机柜总计',
sum(if(r.USE_HEIGHT is null or r.USE_HEIGHT=0,1,0)) as '未使用机柜数',
sum(if(r.USE_HEIGHT>0 and r.USE_HEIGHT<r.HEIGHT,1,0)) as '未满机柜数',
sum(if(r.USE_HEIGHT>=r.HEIGHT,1,0)) as '已满机柜数'
from computer_location l left join network_cabinets r on l.ID=r.COMP_LOCA_ID
group by l.NAME
ifnull(sum(if(ifnull(USE_HEIGHT,0)>0 and HEIGHT-USE_HEIGHT>0,1,0)),0) as 未满机柜数,
ifnull(sum(if(ifnull(USE_HEIGHT,0)>0 and HEIGHT=USE_HEIGHT,1,0)),0) as 已满机柜数 from computer_locatio a left join network_cabinets b on a.id=b.COMP_LOCA_ID
group by a.name
count(r.ID) as '机柜总计',
sum(if(r.ID is not null and (r.USE_HEIGHT is null or r.USE_HEIGHT=0),1,0)) as '未使用机柜数',
sum(if(r.USE_HEIGHT>0 and r.USE_HEIGHT<r.HEIGHT,1,0)) as '未满机柜数',
sum(if(r.USE_HEIGHT>=r.HEIGHT,1,0)) as '已满机柜数'
from computer_location l left join network_cabinets r on l.ID=r.COMP_LOCA_ID
group by l.NAMEmysql> select l.NAME,
-> count(r.ID) as '机柜总计',
-> sum(if(r.ID is not null and (r.USE_HEIGHT is null or r.USE_HEIGHT=0),1,0)) as '未使用机柜数',
-> sum(if(r.USE_HEIGHT>0 and r.USE_HEIGHT<r.HEIGHT,1,0)) as '未满机柜数',
-> sum(if(r.USE_HEIGHT>=r.HEIGHT,1,0)) as '已满机柜数'
-> from computer_location l left join network_cabinets r on l.ID=r.COMP_LOCA_ID
-> group by l.NAME;
+----------------------+----------+--------------+------------+------------+
| NAME | 机柜总计 | 未使用机柜数 | 未满机柜数 | 已满机柜数 |
+----------------------+----------+--------------+------------+------------+
| 香港PCCWIDC机房 | 0 | 0 | 0 | 0 |
| 北京联通亦庄机房 | 0 | 0 | 0 | 0 |
| 北京中电华通工体机房 | 0 | 0 | 0 | 0 |
| 广州电信七星岗机房 | 0 | 0 | 0 | 0 |
+----------------------+----------+--------------+------------+------------+
4 rows in set (0.00 sec)mysql>
SELECT b.ID, MAX (b.NAME), NVL (COUNT (a.ID), 0) AS "机柜总计",
SUM (CASE
WHEN a.use_height IS NULL OR a.use_height = 0
THEN 1
ELSE 0
END
) AS "未使用机柜数",
SUM (CASE
WHEN a.use_height > 0 AND a.height > a.use_height
THEN 1
ELSE 0
END
) AS "未满机柜数",
SUM (CASE
WHEN a.use_height > 0 AND a.height = a.use_height
THEN 1
ELSE 0
END
) AS "已满机柜数"
FROM network_cabinets a, computer_location b
WHERE b.ID = a.comp_loca_id(+)
GROUP BY b.ID
呵呵,顺便学会IF的使用,多谢5楼的xd。