0

すべての回答が「調査」テーブルの別の行に保存される調査を実行します。私のテーブルは次のようになります。

(ID,user_id,Q,A)
(1,10,'laundry','oxiclean')
(2,10,'laundry','tide')
(3,10,'laundry','pods')
(4,11,'laundry','spray n wash')
(5,11,'laundry','resolve')
(6,12,'laundry','oxiclean')
(7,13,'laundry','oxiclean')

特定の製品のみを選択したユーザー ID の数を取得する必要があります。

"SELECT *, count(user_id) FROM survey WHERE Q='laundry' GROUP BY a"

上記は全体的なカウントを示しますが、たとえば「オキシクリーン」のみを選択したユーザーに基づいてカウントを取得する必要があります。これは 2 を返すはずです。

または、「oxclean」と「tide」のみを選択したユーザー。

異なる行から取得した結果のこの「組み合わせ」を実行するにはどうすればよいですか?

どうもありがとう!

4

2 に答える 2

0

サブクエリを使用してそれを達成できます。あなたの場合は次のようになります。

SELECT *, COUNT(user_id)
FROM survey AS s
WHERE Q = 'laundry'
AND A = 'oxiclean'
AND user_id NOT IN (SELECT user_id FROM survey WHERE Q = s.Q AND A != s.A);

s.Q親フィールドをs.A参照して、名前をもう一度再注入する必要がないようにします。
欠点 : クエリは、1 つの特定の回答が必要な場合にのみ機能します。

1 つのクエリで全体のカウントを取得する場合は、次のクエリを実行する必要があります。

SELECT A, COUNT(user_id)
FROM (
  SELECT A, user_id
  FROM survey
  WHERE Q='laundry'
  GROUP BY user_id
  HAVING COUNT(user_id) = 1
  ) AS t
GROUP BY A

欠点 : クエリは、ここで見られるように一意の user_id を少なくとも 1 つしか持たない回答のみを返します。この構文は、パフォーマンス上の理由から避けるべき一時テーブルを作成します。

于 2012-10-06T20:24:30.643 に答える