一道经典的SQL面试题
題:有一張表D,有a,b兩列.a列表示用戶b列表示地區.示例如下圖:要求查出和用戶為張三地區完全相同的其他用戶
題解:
1.首先我們應該查出張三的地區,然后在查出在此范圍內的用戶,則有一下語句
SELECT a FROM D WHERE a <>'張三'
AND b IN(SELECT b FROM D WHERE a='張三')
2.這里面包含了有地區不在張三的地區范圍內的用戶,所以要把這部分排除掉
SELECT a FROM D WHERE a <>'張三'
AND b IN(SELECT b FROM D WHERE a='張三')
AND a NOT IN (SELECT a FROM D WHERE b NOT IN(SELECT b FROM D WHERE a='張三'))
3.很多人寫到這里就認為這道題目OK,但是可能忘記考慮了一種情況,就是用戶只對應一個地區但并且在張三的地區范圍內,則有
SELECT a FROM D WHERE a <>'張三'
AND b IN(SELECT b FROM D WHERE a='張三')
AND a NOT IN (SELECT a FROM D WHERE b NOT IN(SELECT b FROM D WHERE a='張三'))
GROUP BY a HAVING COUNT(b)=(SELECT COUNT(b) FROM D WHERE a='張三')
考點:子查詢、分組查詢、HAVING語句
轉載于:https://www.cnblogs.com/dh616854836/archive/2011/05/12/2044266.html
總結
以上是生活随笔為你收集整理的一道经典的SQL面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 评 成功编SaaS的 10 大技巧
- 下一篇: ubuntu11.04服务器安装