我以为我想到了这个问题,但它让我不知所措。有一个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"
我可以对此查询做些什么来使这个聚合函数有效?
答案 0 :(得分:1)
答案 1 :(得分:1)
Bluefeet的回答绝对是一条路。这是您修改方法以使其工作的方式:
SELECT p_id, count(distinct concat(q_id,':',u_id))
from responses
group by p_id;
这些是我所做的更改:
distinct
中的select distinct
。这通常是group by
。count()
更改为count(distinct)
。你想要计算这一对的不同出现次数。