1. 课堂练习

视图

#按课程汇总,统计每门课程报名的人数

CREATE VIEW 按课程汇总(课程号,人数)

AS

SELECT 课程号,COUNT(学号)

FROM score

GROUP BY 课程号;

#在此基础上筛选出人数小于3的课程号

SELECT 课程号

FROM`按课程汇总`

WHERE 人数<3;

子查询

#查询哪些学生的成绩 比 课程号为0002的全部成绩里的任意一个高呢

SELECT 学号,成绩

FROM score

WHERE 成绩>ANY(SELECT 成绩

FROM score

WHERE 课程号='0002');

#查询哪些学生的成绩 比 课程号为0002的全部成绩里的都高

SELECT 学号,成绩

FROM score

WHERE 成绩>ALL(

SELECT 成绩

FROM score

WHERE 课程号='0002');

标量子查询

#大于平均值的学生的学号和成绩

SELECT 学号,成绩

FROM score

WHERE 成绩>(

SELECT AVG(成绩)

FROM score);

#查询在差生平均成绩(小于60)和优等生(大于80)平均成绩之间的学生

SELECT 学号,成绩

FROM score

WHERE 成绩 BETWEEN (SELECT AVG(成绩) FROM score WHERE 成绩<60)

AND

(SELECT AVG(成绩) FROM score WHERE 成绩>80);

关联子查询

#查找出每个课程中大于对应课程平均成绩的学生

SELECT 学号,课程号,成绩

FROM score AS s1

WHERE 成绩>(SELECT AVG(成绩)

FROM score AS s2

WHERE s1.`课程号`=s2.`课程号`

GROUP BY 课程号);

(group by 可以不写,关联子查询中子句中的关联条件有分组的作用)

#查找出每个课程号最大成绩的所有信息

SELECT*

FROM score AS a

WHERE 成绩 IN( SELECT MAX(成绩)

FROM score AS b

WHERE b.`课程号`=a.`课程号`);

2. SQLzoo

数据来源

SELECT within SELECT Tutorial/zh​sqlzoo.net

#列出每個國家的名字 name,當中人口 population 是高於俄羅斯'Russia'的人口。

SELECT name

FROM world

WHERE population >

(SELECT population

FROM world

WHERE name='Russia')

#列出歐州每國家的人均GDP,當中人均GDP要高於英國'United Kingdom'的數值。

select name

from world

where continent='Europe' and gdp/population>(

select gdp/population

from world

where name='United Kingdom');

#在阿根廷Argentina 及 澳大利亞 Australia所在的洲份中,列出當中的國家名字 name 及洲分 continent 。按國字名字順序排序

select name,continent

from world

where continent in (

select continent

from world

where name in ('Argentina','Australia'))

order by name;

#哪一個國家的人口比加拿大Canada的多,但比波蘭Poland的少?列出國家名字name和人口population 。

select population,name

from world

where population > (

select population

from world

where name='Canada') and population

select population

from world

where name='Poland');

#Germany德國(人口8000萬),在Europe歐洲國家的人口最多。Austria奧地利(人口850萬)擁有德國總人口的11%。顯示歐洲的國家名稱name和每個國家的人口population。以德國的人口的百分比作人口顯示。

select name,concat(round(100*population/(

select population

from world

where name='Germany'),0),'%')

from world

where continent='Europe';

#哪些國家的GDP比Europe歐洲的全部國家都要高呢? [只需列出 name 。] (有些國家的記錄中,GDP是NULL,沒有填入資料的。)

select name

from world

where gdp>all(

select gdp

from world

where continent='Europe' and gdp is not null);

#在每一個州中找出最大面積的國家,列出洲份 continent, 國家名字 name 及面積 area。 (有些國家的記錄中,AREA是NULL,沒有填入資料的。)

SELECT continent, name, area

FROM world as x

WHERE area= (

SELECT max(area)

FROM world as y

where x.continent=y.continent);

#列出洲份名稱,和每個洲份中國家名字按子母順序是排首位的國家名。(即每洲只有列一國)

法1:select continent,name

from world as x

where name=(

select name

from world as y

where x.continent=y.continent

order by name asc

limit 1);

法2:select continent, name

from world as x

where name <= all(

select name

from world as y

where y.continent=x.continent

group by continent);

法3:select continent, name

from world as x

where name <= (

select min(name)

from world as y

where y.continent=x.continent );

以上3个方法都得出同样的正确答案,<= all(子查询)即小于等于所有子查询结果,也就是小于等于子查询结果中的最小值,按照字母排序,默认为升序即a-z,题目要求查询排在首位的name也就是第一个开头是a的name,则在后两个方法中省略了排序过程

#找出洲份,當中全部國家都有少於或等於 25000000 人口. 在這些洲份中,列出國家名字name,continent 洲份和population人口。

select name,continent,population

from world as x

where 25000000>=all (

select population

from world as y

where y.continent= x.continent

group by continent);

#有些國家的人口是同洲份的所有其他國的3倍或以上。列出 國家名字name 和 洲份 continent

法1:select name,continent

from world as x

where population>=all(

select 3*population

from world as y

where x.continent=y.continent and x.name<>y.name

group by continent);

法2:select name,continent

from world as x

where population/3>=all(

select population

from world as y

where x.continent=y.continent and x.name<>y.name

注意:population>=3*all(子查询)是错误的书写方式,根据题意,国家不能和自己比较,因此需要将自己排除在外,即x.name<>y.name

mysql 复杂统计_MYSQL复杂查询相关推荐

  1. mysql 交叉统计_Mysql静态行列转换交叉查询

    技术要点1 最近再做服务评价统计的时候使用到了Mysql静态行列转换交叉查询,弄了一个小例子. 假设有张学生的表(CJ)如下            要期望查询如下的交叉表 name  subject ...

  2. mysql续型_mysql续集(查询部分)

    mysql> select goods_name,goods_id, concat("HTC",substring(goods_name,4)) as name from g ...

  3. 宝塔mysql慢日志_MySQL慢查询日志总结

    慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志 ...

  4. mysql 性能统计_MySql 的统计查询性能问题

    由于数据量非常大(单表:四五百万条数据),需要对这种类型的表进行统计查询,并插入到对应的Maxstatistics(里面是Id.Value.Time) MinStatistics 等表. 这个表的结构 ...

  5. mysql 季度统计_mysql 按年度、季度、月度、周、日SQL统计查询

    一.年度查询 查询 本年度的数据SELECT * FROMblog_articleWHERE year( FROM_UNIXTIME( BlogCreateTime ) ) = year( curda ...

  6. mysql消重统计_mysql sql查询如何实现发私信用户和其他用户的列表?要求消重所有重复的用户结果 - 贪吃蛇学院-专业IT技术平台...

    私信表结构如下: 建表语句和数据 CREATE TABLE `message` ( `id` int(5) NOT NULL, `sender_id` int(5) DEFAULT NULL, `re ...

  7. mysql 层级 统计_MySQL系列(7)

    我是谁?鬼斯通 79.存储过程声明变量 声明变量.修改变量.分配变量 变量范围:只在定义之内能使用,begin和end之间. 80.存储过程参数传递 in.out.inout 根据传入名称,获取对应信 ...

  8. mysql五大子句_MySQL的查询语句中可以使用以下哪个子句来表示分组查询

    [多选题]人类行为遗传学工作者倾向于把人的行为遗传分为哪几类 [填空题]MySQL的连接操作包括内连接.( )和交叉连接. [判断题]社会生活类尤其是人文风光类纪录片的解说则多用文学. 散文手法, 既 ...

  9. mysql报表慢_mysql慢查询日志报表工具mysqlsla

    一.安装 wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz tar xzvf mysqlsla-2.03.tar.gz cd mysqlsl ...

最新文章

  1. 第二节课作业150206309
  2. java中 菜单的触发事件_javaweb ajax+div实现左边菜单右边内容时点击菜单应该触发事件但是右边没反应...
  3. SQL update select结合语句详解及应用
  4. mysql备份与还原-mysqldump备份、mysql与source还原
  5. Linux常用命令大全(新手入门)
  6. 如果你是IT技术人员,请思考这15个问题
  7. Struts2项目搭建
  8. MFC下运行控制台不显示黑屏
  9. 软件工程第二次作业中第一个作业
  10. 从OPPO TWS耳机看OPPO声学的体面回归
  11. 北方工业大学计算机科学与技术复试分数线,北方工业大学计算机学院 2016 年硕士生复试结果.pdf...
  12. 星球大战1-6[Star Wars 1-6]
  13. 如何正确nandflash的块地址和页地址
  14. 看门狗性能软件测试,《看门狗:军团》PC版性能表现分析
  15. 大数据时代的智能运维
  16. 2020身高体重标准表儿童_2020儿童标准身高表出炉,对照下!
  17. iOS开发~WKWebView白屏适配
  18. 软件体系结构层次风格
  19. GetLastError返回值大全(英文最新版)(1000-4000)
  20. 每天都在用WiFi,WiFi和无线网络什么关系?了解此篇足矣

热门文章

  1. python递归详解_Python理解递归的方法总结
  2. 魅族怎么查看内存linux,这就是魅族超级旗舰:看燃
  3. 算法练习day11——190329(平衡二叉树、搜索二叉树、完全二叉树)
  4. OS / Linux / epoll 各种事件解析
  5. 用启明云端支持ESP32的GUI做了一个测温HMI交互界面
  6. java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码
  7. java 多线程 start,Java 线程的run()和start()
  8. Android 系统调试(1) 禁止SeLinux
  9. 项目管理课件_项目管理(PMO)工作到底干些啥?
  10. normalize.css