sql having是什么意思_图解sql面试题:如何查找重复数据?
【題目】
編寫一個SQL查詢,查找學生表中所有重復的學生名。
【解題思路】
1.看到“找重復”的關鍵字眼,首先要用分組函數(group by),再用聚合函數中的計數函數count()給姓名列計數。
2. 分組匯總后,生成了一個如下的表。從這個表里選出計數大于1的姓名,就是重復的姓名。
【解題步驟】
- 方法一
1)創建一個輔助表,將姓名列進行行分組匯總
?select 姓名, count(姓名) as 計數 from 學生表 group by 姓名;2)選出輔助表中計數大于1的姓名
select 姓名 from 輔助表 where 計數 > 1;3)結合前兩步,將“創建輔助表”的步驟放入子查詢
select 姓名 from (select 姓名, count(姓名) as 計數from 學生表group by 姓名 ) as 輔助表 where 計數 > 1;結果:
- 方法二
這時候有的同學可能會想,為什么要這么麻煩創建一個子查詢,不能用這個語句(將count放到where字句中)直接得出答案嗎?
select 姓名 from 學生表 group by 姓名 where count(姓名) > 1;如果我們運行下這個sql語句,會報下面的錯誤,問題出在哪里呢?
前面提到聚合函數(count),where字句無法與聚合函數一起使用。因為where子句的運行順序排在第二,運行到where時,表還沒有被分組。(如果不清楚,可以系統看下我之前的課程《從零學會SQL:匯總分析》)
如果要對分組查詢的結果進行篩選,可以使用having子句。所以,這道題的最優方法如下:
select 姓名 from 學生表 group by 姓名 having count(姓名) > 1;【本題考點】
1)考察思路,有兩種解題方法,但是使用having語句的方法更高效。
2)考察對having語句的掌握,很多人會把聚合函數寫到where子句中。
3)熟記SQL子句的書寫順序和運行順序。
【舉一反三】
本題也可以拓展為:找出重復出現n次的數據。只需要改變having語句中的條件即可:
select 列名 from 表名 group by 列名 having count(列名) > n;推薦:如何提升你的分析技能,實現升職加薪?
總結
以上是生活随笔為你收集整理的sql having是什么意思_图解sql面试题:如何查找重复数据?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 现代软件工程讲义 个人项目和结对项目练
- 下一篇: android xml配置,Androi