GROUP BY 聚合函數(max min sum avg count) 和HAVING的 使用


重新復習一下這個都源自於我經常需要查的一個需求

“要找到表里面 出現了兩次或者三次的某個字段”

 

現在假設有一張表字段是

+----+---------------------+-----------------------+---------------------+
| 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指定條件里面是無法使用聚合函數的。

其實直接操作數據庫的時間還是蠻多的,但是大部分時間都是在操作簡單的查詢語句,對於稍微復雜的語句沒有更多的涉獵,及時每次用到的時候看看后面由於不經常使用就又生疏了,所以最近會陸陸續續紀錄一些。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM