mysql
  • sql
  • group-by
  • 2013-02-07 56 views 0 likes 
    0

    下面的MySQL查詢的次數會給出一個結果如下MySQL查詢獲得各自的ID

    $query = "SELECT PS.user_id, PS.pro_id 
        FROM pro_Purchase AS PS 
        INNER JOIN program_detail AS PD ON PD.program_master_id = PS.pro_id 
        WHERE PD.program_type = 'program' 
        AND PS.subscribe_status = '1' 
        GROUP BY PS.`programs_subscribed_id` 
        HAVING COUNT(`pro_id`) > '1' 
        ORDER BY PS.pro_id" 
    

    結果

    user_id program_id 
    97  167  
    12  172  
    12  172  
    216  173  
    216  173  
    215  173  
    216  173  
    12  173  
    12  173  
    12  173  
    216  173  
    

    在這裏,我想每個program_id

    count對於例如:count(172),count(173)等。

    id count 
    172 2 
    

    回答

    0

    你可以用你的查詢在subqery在這樣的外部查詢計數:

    SELECT 
        user_id, COUNT(pro_id) 
    FROM 
    (
        SELECT PS.user_id, PS.pro_id 
        FROM pro_Purchase AS PS 
        INNER JOIN program_detail AS PD ON PD.program_master_id = PS.pro_id 
        WHERE PD.program_type = 'program' 
         AND PS.subscribe_status = '1' 
        GROUP BY PS.programs_subscribed_id 
        HAVING COUNT(pro_id) > '1' 
    ) AS Sub 
    GROUP BY user_id 
    ORDER BY pro_id; 
    

    需要注意的是:在你發佈你被PS.programs_subscribed_id分組和選擇PS.user_id, PS.pro_id查詢SELECT子句既不在聚合函數中,也不在GROUP BY子句中,因此您不會以這種方式獲得不一致的數據。

    你可以這樣做,而不是:

    SELECT PS.pro_id, COUNT(PS.user_id) 
    FROM pro_Purchase AS PS 
    INNER JOIN 
    (
        SELECT programs_subscribed_id 
        FROM pro_Purchase 
        GROUP BY programs_subscribed_id 
        HAVING COUNT(pro_id) > 1 
    ) AS PS2 ON PS.programs_subscribed_id = PS2.programs_subscribed_id 
    INNER JOIN program_detail AS PD ON PD.program_master_id = PS.pro_id 
    WHERE PD.program_type = 'program' 
        AND PS.subscribe_status = '1' 
    GROUP BY PS.pro_id; 
    

    這樣,多餘的JOIN與子查詢:

    SELECT programs_subscribed_id 
        FROM pro_Purchase 
        GROUP BY programs_subscribed_id 
        HAVING COUNT(pro_id) > 1 
    

    將確保從pro_Purchase表中選擇每一行都有COUNT(pro_id) > 1每個programs_subscribed_id和這就是爲什麼你在第一個查詢中按programs_subscribed_id進行分組的原因。

    相關問題