0

Following mysql query will give a result as follows

$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"

Result

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     

Here I want to get the count of each program_id

For eg:count(172),count(173) and so on.

id   count
172  2
4

1 に答える 1

0

次のように、クエリをサブクエリでラップし、外側のクエリでカウントできます。

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しているため、この方法で矛盾したデータを取得することはありません。SELECTGROUP 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

于 2013-02-07T07:09:44.283 に答える