mysql从视图view简化到带子查询的sql
2008-07-17 01:07
495 查看
DROP TABLE IF EXISTS `log`;
CREATE TABLE `log` (
`log_id` bigint(20) NOT NULL auto_increment,
`device_ip` varchar(23) NOT NULL,
`severity` tinyint(1) NOT NULL,
PRIMARY KEY (`log_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE VIEW `k3` AS SELECT device_ip,count(CASE WHEN severity=3 THEN 1 ELSE NULL END) as s3 FROM log where 1=1 group by device_ip;
CREATE VIEW `k2` AS SELECT device_ip,count(CASE WHEN severity=2 THEN 1 ELSE NULL END) as s2 FROM log where 1=1 group by device_ip;
CREATE VIEW `k1` AS SELECT device_ip,count(CASE WHEN severity=1 THEN 1 ELSE NULL END) as s1 FROM log where 1=1 group by device_ip;
select k3.device_ip,k3.s3,k2.s2,k1.s1 from k3,k2,k1 where k3.device_ip=k2.device_ip and k2.device_ip=k1.device_ip order by k3.s3 desc,k2.s2 desc,k1.s1 desc;
说明:count(CASE WHEN severity=1 THEN 1 ELSE NULL END)是为了让count为0的记录也显示出来。
以上简化为一个带子查询的sql:
select k3.device_ip,k3.s3,k2.s2,k1.s1 from (SELECT device_ip,count(CASE WHEN severity=3 THEN 1 ELSE NULL END) as s3 FROM log where 1=1 group by device_ip) as k3,(SELECT device_ip,count(CASE WHEN severity=2 THEN 1 ELSE NULL END) as s2 FROM log where 1=1 group by device_ip) as k2,(SELECT device_ip,count(CASE WHEN severity=1 THEN 1 ELSE NULL END) as s1 FROM log where 1=1 group by device_ip) as k1 where k3.device_ip=k2.device_ip and k2.device_ip=k1.device_ip order by k3.s3 desc,k2.s2 desc,k1.s1 desc;
CREATE TABLE `log` (
`log_id` bigint(20) NOT NULL auto_increment,
`device_ip` varchar(23) NOT NULL,
`severity` tinyint(1) NOT NULL,
PRIMARY KEY (`log_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE VIEW `k3` AS SELECT device_ip,count(CASE WHEN severity=3 THEN 1 ELSE NULL END) as s3 FROM log where 1=1 group by device_ip;
CREATE VIEW `k2` AS SELECT device_ip,count(CASE WHEN severity=2 THEN 1 ELSE NULL END) as s2 FROM log where 1=1 group by device_ip;
CREATE VIEW `k1` AS SELECT device_ip,count(CASE WHEN severity=1 THEN 1 ELSE NULL END) as s1 FROM log where 1=1 group by device_ip;
select k3.device_ip,k3.s3,k2.s2,k1.s1 from k3,k2,k1 where k3.device_ip=k2.device_ip and k2.device_ip=k1.device_ip order by k3.s3 desc,k2.s2 desc,k1.s1 desc;
说明:count(CASE WHEN severity=1 THEN 1 ELSE NULL END)是为了让count为0的记录也显示出来。
以上简化为一个带子查询的sql:
select k3.device_ip,k3.s3,k2.s2,k1.s1 from (SELECT device_ip,count(CASE WHEN severity=3 THEN 1 ELSE NULL END) as s3 FROM log where 1=1 group by device_ip) as k3,(SELECT device_ip,count(CASE WHEN severity=2 THEN 1 ELSE NULL END) as s2 FROM log where 1=1 group by device_ip) as k2,(SELECT device_ip,count(CASE WHEN severity=1 THEN 1 ELSE NULL END) as s1 FROM log where 1=1 group by device_ip) as k1 where k3.device_ip=k2.device_ip and k2.device_ip=k1.device_ip order by k3.s3 desc,k2.s2 desc,k1.s1 desc;
相关文章推荐
- 第二天,导出文件sql,查询,视图view,聚合函数,反模式,字符串处理函数
- mysql创建视图不能包涵子查询的解决办法。View's SELECT contains a subquery in the FROM clause
- sql:MySQL 6.7 表,视图,存储过程结构查询
- mysql中的视图存在的必要性 --- 简化查询
- 10万数据量的数据库查询效率比较 纯sql语句 和 view 视图
- MySQL命令篇之库、表、索引、用户、视图及SELECT查询
- 从Mysql某一表中随机读取n条数据的SQL查询语句
- ibatis动态多条件查询及模糊查询(oracle,mysql,sql)
- 关于mysql查询语句基础SQL
- MySQL查询本周、上周、本月、上个月份数据的sql代码
- mysql视图查询
- 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- 使用笔记:mysql与oracle进行sql查询时如何表示日期
- mysql的查询sql中使用case的例子
- mysql慢查询,sql性能分析
- 四种数据库(SqlServer/Oracle/Mysql/Sybase)查询前N条数据
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的陷阱
- Mysql 视图 view
- Mysql 将数据库中的手机号码,以前4位+****+后三位整表查询处理 SQL语句
- Mysql SQL random read n item data from a table ( Mysql随机读取SQL查询语句 )