重新復習一下這個都源自於我經常需要查的一個需求
“要找到表里面 出現了兩次或者三次的某個字段”
現在假設有一張表字段是
+----+---------------------+-----------------------+---------------------+ | id | customer_service_id | refund_application_id | create_time | +----+---------------------+-----------------------+---------------------+ | 1 | 1 | 199885 | 2016-10-27 15:39:59 | | 2 | 2 | 199886 | 2016-10-27 15:46:33 | | 3 | 3 | 199887 | 2016-10-27 15:47:04 | | 4 | 4 | 199888 | 2016-10-27 15:48:41 | | 5 | 5 | 199888 | 2016-10-27 15:48:41 | +----+---------------------+-----------------------+---------------------+
我在現在要找出refund_applicaiton_id出現了相同的兩次以上的refund_application_id 如何操作?
select * from ec_temporary_csmap group by refund_application_id HAVING count(refund_application_id)>=2;
這條語句可以幫我找到該行數據,但是他只會顯示着一條
5 | 5 | 199888 | 2016-10-27 15:48:41 |
這是為什么呢? 因為group by會為我們對指定字段進行分組,如果分組字段有重復的值出現,則只會留其中一條,我們上面的語句就是對refund_application_id進行了分組,所以他都是唯一的,然后基於此我們使用HAVING加上聚合函數count對分組數據進行篩選。我們的條件的是refund_application_id 出現次數大於兩次的分組。自然就得到了我們想要的結果。
另外需要注意的事情分組之后才能使用HAVING 來利用聚合函數來得到我們想要的結果,where指定條件里面是無法使用聚合函數的。
其實直接操作數據庫的時間還是蠻多的,但是大部分時間都是在操作簡單的查詢語句,對於稍微復雜的語句沒有更多的涉獵,及時每次用到的時候看看后面由於不經常使用就又生疏了,所以最近會陸陸續續紀錄一些。