我有一个用户输入问题的表格。他们可以选择为同一个问题提供最多五个答案,因此您可以为同一个问题提供最多五个不同答案的5个字段。
所以field1,filed2,field3,field4,field5都可以得到答案" foo"
我想创建一个查询,该查询将返回每个可能答案的所有用户的五列中任何一列的总答案数。
所以输出结果为:
'富' 22'我喜欢蛋糕' 32'谁在乎' 2
我正走在正确的轨道上,但我怀疑有更优雅的解决方案。以下是我到目前为止的情况:
SELECT field1,filed2,field3,field4,field5,
(sum(CASE WHEN field1='foo' THEN 1 ELSE 0 END) +
sum(CASE WHEN field2='foo' THEN 1 ELSE 0 END)) +
sum(CASE WHEN field3='foo' THEN 1 ELSE 0 END)) +
sum(CASE WHEN field4='foo' THEN 1 ELSE 0 END)) +
sum(CASE WHEN field5='foo' THEN 1 ELSE 0 END)) AS count
FROM items
GROUP BY field1,filed2,field3,field4,field5
;
任何建议都将不胜感激。
答案 0 :(得分:1)
也许这就是你所需要的。有一个派生表,将所有列UNION ALL
- 返回到一个列。然后执行GROUP BY
:
select field, count(*)
from
(
select field1 as field from items
union all
select field2 from items
union all
...
select fieldn from items
) dt
group by field