1. 程式人生 > >MYSQL使用group by時,查詢結果的總記錄數

MYSQL使用group by時,查詢結果的總記錄數

在使用group by時
 select count(*)  from partner.gs_user_info u group by u.username,u.game;


查詢結果如下:

count計算的數量是每個group by的結果的數量,並不是我要的查詢記錄數的數量。
正確的寫法是這樣的:
select count(*) from ( select *  from partner.gs_user_info u group by u.username,u.game) aa;

結果如下:

或者相同結果的寫法:

select count(distinct u.username,u.game)  from partner.gs_user_info u ;

在使用criteria時使用distinct:

ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("username"));
projectionList.add(Projections.property("game"));
criteria.setProjection(Projections.distinct(projectionList));



參考:http://blog.csdn.net/thc1987/article/details/25150789

SELECT t.report_date ,t.user_id FROM my_table t GROUP BY t.user_id,t.report_date

比如有這樣一條SQL,根據t.user_id,t.report_date兩個欄位統計

這樣前端頁面能展示資料,但往往需要一個總記錄數,在有分頁的情況下用到

一種解決方法是在外面套一層,然後對其count(*)

    SELECT COUNT(*) FROM (SELECT       
            t.report_date  
            ,t.user_id        
        FROM   
        my_table t  
        GROUP BY t.user_id,t.report_date ) AA  

還有一種簡單的方法可以這樣寫
    SELECT COUNT(DISTINCT report_date,user_id)  
    FROM my_table  

這樣就針對上面的group by查詢顯示其總記錄數
 如果只對user_id group by
    SELECT     
            t.user_id         
        FROM   
        my_table t  
        GROUP BY t.user_id  

    SELECT COUNT(DISTINCT user_id) FROM my_table