mysql
  • sql
  • group-by
  • 2013-02-07 53 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进行分组的原因。

    相关问题