0

私はこれを理解したと思ったが、それは私を逃れている. さまざまなテーマ パークのユーザー調査を収集する Web アプリをバックエンドに持つ MySQL データベースがあります。一連の 30 の質問があります。いくつかはラジオボタン スタイルの複数選択式で、いくつかはチェックボックス スタイルです。応答はすべて、次のようなリレーショナル テーブルに格納されます。

"id"|"q_id"| "a_id"|"u_id"                              |"p_id"| 
 "1"|   "1"|    "1"|"8f699ecbd9f130df14c1e4e0a6383516"|"106397"|
 "2"|   "1"|    "2"|"8f699ecbd9f130df14c1e4e0a6383516"|"106397"|
 "3"|   "2"|    "1"|"8f699ecbd9f130df14c1e4e0a6383516"|"106397"|
 "4"|   "3"|    "1"|"8f699ecbd9f130df14c1e4e0a6383516"|"106397"|
 "7"|   "3"|    "3"|"8f699ecbd9f130df14c1e4e0a6383516"|"106397"|
 "8"|   "3"|    "4"|"8f699ecbd9f130df14c1e4e0a6383516"|"106397"|
 "9"|   "1"|    "2"|"348895be7b4affac001c9ba096d8c1d3"|"106397"|
"10"|   "1"|    "3"|"348895be7b4affac001c9ba096d8c1d3"|"106397"|
"11"|   "3"|    "2"|"348895be7b4affac001c9ba096d8c1d3"|"106397"|
"13"|   "3"|    "3"|"348895be7b4affac001c9ba096d8c1d3"|"106397"| 
 "1"|   "1"|    "3"|"8f699ecbd9f130df14c1e4e0a6383516"|"380486"|
 "3"|   "2"|    "2"|"8f699ecbd9f130df14c1e4e0a6383516"|"380486"|
 "4"|   "3"|    "2"|"8f699ecbd9f130df14c1e4e0a6383516"|"380486"|
 "7"|   "3"|    "4"|"8f699ecbd9f130df14c1e4e0a6383516"|"380486"|
 "8"|   "3"|    "4"|"8f699ecbd9f130df14c1e4e0a6383516"|"380486"|
"11"|   "3"|    "2"|"348895be7b4affac001c9ba096d8c1d3"|"380486"|
"13"|   "3"|    "3"|"348895be7b4affac001c9ba096d8c1d3"|"380486"| 

q_id は回答された質問です a_id は選択されたオプションです u_id はオプションを選択したユーザーです p_id は質問に回答した遊園地です

したがって、このテーブルには、チェックボックス スタイルの質問の場合、u_id、q_id、および p_id が同じである複数のレコードが含まれる場合がありますが、u_id、q_id、p_id、および a_id が同じであるレコードは決して含まれません。

ここで行う必要があるのは、特定の遊園地で特定の各質問に回答された合計回数をカウントするクエリを作成することです。この場合、必要なのは次のとおりです。

  "p_id"|"count" 
"106397"|"5"
"380486"|"4" 

...つまり、各 p_id と、q_id と u_id の両方の一意のインスタンスの数が必要です。私はこれがうまくいくと思った:

SELECT distinct p_id, count(concat(q_id,u_id)) from responses group by p_id

しかし、それでも q_id と u_id の値が同じで a_id の値が異なる 2 つのレコードを 2 回カウントしているようで、次のようになります。

  "p_id"|"count" 
"106397"|"10"
"380486"| "7"    

この集計関数を機能させるには、このクエリに対して何ができますか?

4

2 に答える 2

1

Bluefeet の答えは間違いなく 1 つの方法です。これは、アプローチを変更して機能させる方法です。

SELECT p_id, count(distinct concat(q_id,':',u_id))
from responses
group by p_id;

これらは私が行った変更です:

  1. の を削除しdistinctましたselect distinct。これは (一般的に) と冗長group byです。
  2. を に変更しcount()ましたcount(distinct)。このペアの個別の発生をカウントしたいとします。
  3. セパレーターを追加しました。そうすれば (23, 4) は (2, 34) と混同されません。念のため。
于 2013-05-23T01:05:45.330 に答える