2017-01-25 44 views
0

我有一个包含ID的表格,并回答它看起来像列:SQL查询来比较有统计记录大于1

| id | answer | 
| 1 | Yes | 
| 2 | No | 
| 3 | Unsure | 
| 1 | No | 
| 1 | Unsure | 
| 3 | Yes | 
| 2 | Unsure | 
| 4 | NULL | 
| 4 | Unsure | 
| 4 | No  | 

我想输出的方式,如果用户ID曾经回答“是“(例如id 1),那么最终输出应该有1. 但是,如果用户标识已回答”否“和”NULL“,则输出应为”否“ 此外,如果用户标识回答”不确定“否“或”不确定“和”空“,则输出应该是”不确定“

最终输出:

| id | answer | 
| 1 | Yes | 
| 2 | Unsure | 
| 3 | Yes | 
| 4 | Unsure | 
+0

鉴于您需要分析用户的答案集,我想我会将可能的答案转换为单独的列,按用户ID分组。然后,您可以轻松分析用户拥有哪些答案,并确定哪个答案最合适。 –

回答

0

你想用聚集和case逻辑是:

select id, 
     (case when sum(case when Answer = 'yes' then 1 else 0 end) > 0 
      then 'yes' 
      when sum(case when answer = 'unsure' then 1 else 0 end) > 0 
      then 'unsure' 
      else 'no' -- or perhaps max(answer) 
     end) as answer 
from t 
group by id; 

如果只可能是“是”,“否”,“不确定”和NULL,那么你可以采取一个捷径:

select id, 
     (case when max(Answer) = 'yes' 
      then 'yes' 
      when max(answer) = 'unsure' 
      then 'unsure' 
      else 'no' -- or perhaps max(answer) 
     end) as answer 
from t 
group by id; 
+0

真的是一个有趣的答案。你能否在第二个选项中告诉我使用max()函数? – Sravee

+0

@sravee。 。 。 'max()'是'max()'。 。 。我不确定你的问题是什么。 –

+0

对不起,我打算在这种情况下询问max()是否计算答案字段或id字段? – Sravee

0
CASE WHEN (.Answer IS NULL OR .Answer = 'No') THEN 'NO' ELSE (.Answer) END AS 'FILTERED ANSWER' 

这可以帮助你吗?