我以为我已经解决了这个问题,但它正在躲避我。有一个 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 值两次的记录,给我:
"p_id"|"count"
"106397"|"10"
"380486"| "7"
我可以对这个查询做些什么来使这个聚合函数起作用?