转载:一位计算机专业大学生历程
1965.丢失信息的雇员 写出一个查询语句,找到所有 丢失信息 的雇员id。当满足下面一个条件时,就被认为是雇员的信息丢失:
·雇员的姓名丢失了,或者
·雇员的薪水信息 丢失了
返回这些雇员的id employee_id , 从小到大排序 。
考点 1.union与union all
UNION
UNION ALL
重复结果
去重
保留
排序处理
排序
只是合并
效率处理
低
高
2.having
🔨在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
👉where 和having之后都是筛选条件 ,但是有区别的:
·where在group by前 , having在group by 后
·聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后
3.count()
🔨是一个聚合函数,它返回符合条件行数。
4.as t
这段的意义在于🔨起别名,每个派生表都需要有自己的别名,不起别名执行不了!
5.group by
字面意思:通过xxx分组
思路与代码 思路很简单:雇员的姓名丢失了或者雇员的薪水信息丢失,都会导致employee_id 在 employees 和salaries 的并集表 里面仅出现一次.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 select employee_id from ( select employee_id from employees union all select employee_id from salaries ) as t group by employee_id having count (employee_id) = 1 order by employee_id;
1795. 每个产品在不同商店的价格 请你重构 Products 表,查询每个产品在不同商店的价格,使得输出的格式变为(product_id, store, price) 。如果这一产品在商店里没有出售,则不输出这一行。
输出结果表中的 顺序不作要求 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 输入: Products table : + | product_id | store1 | store2 | store3 | + | 0 | 95 | 100 | 105 | | 1 | 70 | null | 80 | + 输出: + | product_id | store | price | + | 0 | store1 | 95 | | 0 | store2 | 100 | | 0 | store3 | 105 | | 1 | store1 | 70 | | 1 | store3 | 80 | + 解释: 产品0 在store1,store2,store3的价格分别为95 ,100 ,105 。 产品1 在store1,store3的价格分别为70 ,80 。在store2无法买到。
考点
🧐行列转换
⚙
代码
1 2 3 4 5 6 7 8 9 10 11 SELECT product_id, 'store1' store, store1 priceFROM ProductsWHERE store1 IS NOT NULL UNION ALL SELECT product_id, 'store2' store, store2 priceFROM ProductsWHERE store2 IS NOT NULL UNION ALL SELECT product_id, 'store3' store, store3 priceFROM ProductsWHERE store3 IS NOT NULL ;