4.组合查询 & 指定选取
1.1965.丢失信息的雇员
1 # Write your MySQL query statement below 2 SELECT 3 employee_id 4 FROM 5 Employees 6 WHERE 7 employee_id not in (select employee_id from Salaries) 8 UNION 9 SELECT 10 employee_id 11 FROM 12 Salaries 13 WHERE 14 employee_id not in (select employee_id from Employees) 15 ORDER BY employee_id;
2.1795.每个产品在不同商店的价格
MySQL列转行、行转列 - 每个产品在不同商店的价格 - 力扣(LeetCode)
第2行必须 ‘store1 ’ 而 store1不可以:因为 不加引号是给原有的store1这一列取别名,而值还是原来的值,也就是那些价格数字; 加了引号是说创造一个新的列叫store,这一列的所有值都是"store1"
“ ‘store1’ store ” 这个store1是一个字符串,是store属性那一列的值
“ ‘store1 price’ ” 这个store1是一个int型数据,是原来Products表里store1属性那一列的值
1 # Write your MySQL query statement below 2 SELECT product_id,'store1' /*as*/ store,store1 price 3 FROM Products 4 WHERE store1 IS NOT NULL 5 UNION 6 SELECT product_id,'store2' store,store2 price 7 FROM Products 8 WHERE store2 IS NOT NULL 9 UNION 10 SELECT product_id,'store3' store,store3 price 11 FROM Products 12 WHERE store3 IS NOT NULL;
3.608树节点
i.第12行要加后面的条件 p_id IS NOT NULL ,因为当只有一个根节点时,集合(select p_id from tree where p_id IS NOT NULL)里没有元素,自然就满足了id not in ......的条件
1 # Write your MySQL query statement below 2 SELECT id,'Root' type 3 FROM tree 4 WHERE p_id IS NULL 5 UNION 6 SELECT id,'Inner' type 7 FROM tree 8 WHERE id in (select /*distinct*/ p_id from tree) and p_id IS NOT NULL 9 UNION 10 SELECT id,'Leaf' type 11 FROM tree 12 WHERE id not in (select p_id from tree where p_id IS NOT NULL) and p_id IS NOT NULL 13 ORDER BY id;
ii.第6行比i中解法中第12行相比少了后面的条件p_id IS NOT NULL,因为用的是控制流case语句,如果到了leaf条件这里,说明不满足前面的条件 p_id IS NULL,所以p_id 肯定是IS NOT NULL的
1 # Write your MySQL query statement below 2 SELECT id, 3 CASE 4 WHEN p_id IS NULL 5 THEN 'Root' 6 WHEN id NOT IN (SELECT DISTINCT atree.p_id FROM tree atree WHERE atree.p_id IS NOT NULL) 7 THEN 'Leaf' 8 ELSE 9 'Inner' 10 END type 11 FROM 12 tree 13 ORDER BY id;
iii.还可用if语句(第二个IF语句内条件没加p_id IS NOT NULL 原因与ii一样)
1 # Write your MySQL query statement below 2 SELECT id, 3 IF(ISNULL(p_id),'Root',IF(tree.id IN (SELECT DISTINCT atree.p_id FROM tree atree WHERE atree.p_id IS NOT NULL),'Inner','Leaf')) type 4 FROM 5 tree 6 ORDER BY id;
4.176.第二高的薪水
i.
IFNULL(f1,f2):如果f1不为空 则返回f1的值,否则返回f2的值
LIMIT nums1 OFFSET nums2:跳过nums2个数字后 选nums1个数字 (21条消息) sql中limit和offset用法_华山栈道的博客-CSDN博客_sql中limit和offset

1 # Write your MySQL query statement below 2 SELECT IFNULL( 3 (SELECT DISTINCT salary 4 FROM Employee 5 ORDER BY salary DESC 6 LIMIT 1 OFFSET 1),null) SecondHighestSalary; 7 /*FROM Employee;*/ 因为后面没加where等条件限制 如果最后加了这一行那么原表中salary有几行数据,结果就会有几行数据。如果硬要加这一行的话 要在第2行SELECT 后面加一个DISTINCT
ii.选第二高还可以,但选第三高第四高......就麻烦了
1 # Write your MySQL query statement below 2 SELECT MAX(salary) SecondHighestSalary 3 FROM 4 Employee 5 WHERE 6 salary < (SELECT MAX(salary) FROM Employee);

浙公网安备 33010602011771号