sql多表查询之合并查询(union)
题1
https://www.nowcoder.com/practice/203d0aed8928429a8978185d9a03babc?tpId=240&tags=&title=&difficulty=0&judgeStatus=0&rp=0
解1
(select exam_id as tid,count(distinct uid) as uv,count(exam_id) as pv
FROMexam_record
group byexam_id)union all # 不去重(select question_id as tid,count(distinct uid) as uv,count(question_id) as pv
FROMpractice_record
group byquestion_id)order BYLEFT(tid, 1) desc,uv desc,pv DESC;
解2
select *
from(select exam_id as tid,count(distinct uid) as uv,count(*) as pvfrom exam_recordgroup by exam_idorder by uv desc, pv desc) as examunionselect *
from(select question_id as tid,count(distinct uid) as uv,count(*) as pvfrom practice_recordgroup by question_idorder by uv desc, pv desc) as practice # 注意子表必须有表名。
解3
用tid字段的左边第一个数来排序。
要注意的是关于UNION后的排序问题,要么在UNION之前分别单独排序(如上解法),要么在union之后再排序:
(SELECT exam_id AS tid, COUNT(DISTINCT exam_record.uid) uv,COUNT(*) pv
FROM exam_record
GROUP BY exam_id)UNION(SELECT question_id AS tid, COUNT(DISTINCT practice_record.uid) uv,COUNT(*) pv
FROM practice_record
GROUP BY question_id)ORDER BY LEFT(tid,1) DESC, uv DESC, pv DESC;
题2
https://www.nowcoder.com/practice/a126cea91d7045e399b8ecdcadfb326f?tpId=240&tags=&title=&difficulty=0&judgeStatus=0&rp=0
select uid,'activity1' as activity
from exam_record
where year(submit_time) = 2021
group by uid
having min(score) >= 85 # 对于每组 要求最小得分不小于85,过滤union all # 将两个筛选合并。不去重select distinct uid,'activity2' as activity
from exam_record e_r join examination_info e_ion e_r.exam_id = e_i.exam_id
where year(e_r.submit_time) = 2021and e_i.difficulty = 'hard'and e_r.score > 80and timestampdiff(minute, e_r.start_time, e_r.submit_time) * 2 < e_i.duration
order by uid
或:
select uid,'activity1' as activity
from exam_record
where year(submit_time) = 2021
group by uid
having min(score) >= 85 # 对于每组 要求最小得分不小于85,过滤union all # 将两个筛选合并。不去重select distinct uid,'activity2' as activity
from exam_record e_r join examination_info e_ion e_r.exam_id = e_i.exam_id
where year(submit_time) = 2021and difficulty = 'hard'and score > 80and timestampdiff(minute, start_time, submit_time) * 2 < duration
order by uid
sql多表查询之合并查询(union)相关推荐
- 索引及其背后的数据结构(顺带介绍了一下子查询和合并查询)
索引及其背后的数据结构(顺带介绍了一下子查询和合并查询) 子查询
- MySQL 表的增删改查(进阶篇②)· 联合查询 内连接 外连接 · 自连接 · 子查询 exists · 合并查询 union
接进阶篇①,我们继续学习. 一.联合查询 1.1 内连接 1.2 外连接 1.3 内连接和左右外连接的区别 二.自连接 三.子查询 3.1 单行子查询 3.2 多行子查询 使用 in 范围匹配多行 另 ...
- sql 多表多行模糊查询_从零开始学习SQL(五)多表查询
经过之前的学习,现在我们已经对查询有了一定的了解,但是我们目前的所有查询都只能找到在一张表中的数据,但如果我们需要寻找分布在多张表格中的数据时,这种之前的查询就做不到了,这时就需要引入一种新的查询方法 ...
- Sql Server 表出现问题无法查询
USE [hdj_dhlgdxdcdbxt_zs] declare @dbname varchar(255) set @dbname='数据库名' –转化为单用户模式,如法执行失败可通过 数据库-&g ...
- MySQL聚合查询实现多表查询,联合查询,合并查询
Author:老九 计算机专业 可控之事 沉重冷静 不可控之事 乐观面对 85180586@qq.com
- 【MySQL联合查询】合并查询数据记录
- oracle 查询两张表合并,oracle的多表合并查询-工作心得
刚刚开发需求写了个SQL,记个笔记,学习下关于数据库的多表合并查询的用法 select t.* from A t UNION ALL/UNION/Intersect/MINUS select s.* ...
- SQL合并查询、连接查询、SQL数据类型
关联查询例题 select count(*) from t_activity a join t_user u1 on a.activity_owner = u1.user_id join t_user ...
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
最新文章
- 5 门可能衰落的编程语言
- NameError: name ‘train_test_split‘ is not defined的解决方法:
- R语言之字符处理(一)
- PCB设计要点-DDR3布局布线技巧及注意事项
- C语言 使用递归函数计算1到n之和
- C语言再学习 -- 位、字节、字、字长、字元的关系
- ORACLE DBA学习笔记--表空间的管理(tablespace)
- xp系统web服务器搭建教程,Windows_XP配置WEB服务器教程(图)
- 20145236 《Java程序设计》 第6周学习总结
- 为什么数据库使用有序索引,而程序员却在使用哈希表?
- Flex利用Datagrid来设置全选和单选
- 剑指offer面试题[9-2]-变态跳台阶
- TouchPanel--Qcom DRM休眠唤醒通知链的注册及回调流程
- Wifi热点工具-青青草原WiFi
- 新计算机如何用光盘安装系统,无光驱怎么重装系统|新电脑无光驱重装系统步骤...
- 通过多视图信息瓶颈学习鲁棒表征
- ShowType=0,● 交换机命令show interfaces type 0/port_# switchport|trunk用于显示中继连接的配置情况,下面 - 赏学吧...
- vue通过v-for取出的一个字段是时间戳格式转换成年月日
- 黑龙江局与深圳大疆公司等开展无人机植保技术交流
- mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键