巧用 HAVING 子句
一般 HAVING 是与 GROUP BY 结合使用的,但其实它是可以独立使用的, 假设有如下表,第一列 seq 叫连续编号,但其实有些编号是缺失的,怎么知道编号是否缺失呢?
用 HAVING 表示如下:
SELECT ‘存在缺失的编号‘ AS gap FROM SeqTbl HAVING COUNT(*) <> MAX(seq);
自连接
针对相同的表进行的连接被称为“自连接”(self join),这个技巧常常被人们忽视,其实是有挺多妙用的。
删除重复行:上图中有三个橘子,需要把这些重复的行给删掉,用如下自连接可以解决:
DELETE FROM Products P1 WHERE id < ( SELECT MAX(P2.id) FROM Products P2 WHERE P1.name = P2.name AND P1.price = P2.price );
使用自连接可以这么写:
-- 排序从 1 开始。如果已出现相同位次,则跳过之后的位次 SELECT P1.name, P1.price, (SELECT COUNT(P2.price) FROM Products P2 WHERE P2.price > P1.price) + 1 AS rank_1 FROM Products P1 ORDER BY rank_1;
结果如下:
name price rank ----- ------ ------ 橘子 100 1 西瓜 80 2 苹果 50 3 葡萄 50 3 香蕉 50 3 柠檬 30 6
巧用 COALESCE 函数
SELECT COALESCE(city, ‘N/A‘) FROM customers;
原文:https://www.cnblogs.com/garrett7/p/13203992.html