【问题标题】:SQL Survey db - does structure of db allow this?SQL Survey db - db 的结构是否允许这样做?
【发布时间】:2019-03-05 14:24:42
【问题描述】:

我有一个具有特定结构的调查数据库(允许在同一个数据库中进行多个不同的调查):每个受访者回答的每个问题都会得到一行,而不是每个问题的一行包含多列。像这样:

Respondent|Question|Answer|  Broker  | Year |
----------|--------|------|----------|------|
Person1   |    a   |   2  | Broker X | 2018 |
Person1   |    b   |   3  | Broker X | 2018 |
Person1   |    c   |   5  | Broker X | 2018 |
Person2   |    a   |   5  | Broker X | 2018 |
Person2   |    a   |   3  | Broker Y | 2018 |

我可以使用“GROUP BY”运行基本查询,以获取 2018 年每个问题的每个经纪人的排名表。但是,考虑到上述结构,是否有可能在同一个表中获得 2018 年和每个经纪人的 2017 年?或者这在逻辑上是不可能的?

谢谢!

编辑:抱歉,不清楚。我想在一列中获得 2018 年的分数,在另一列中获得 2017 年的分数。

【问题讨论】:

  • 添加更多示例数据,包括 2017 行。还要指定预期的结果。 (全部为格式化文本,而不是图像。)
  • 并显示您想要的结果。目前尚不清楚您要达到的目标。

标签: sql select group-by survey


【解决方案1】:

是的。而不是按年份分组,只需在 where 子句中限制为 2017/2018,例如

GROUP BY Broker
WHERE [Year] in (2017,2018)

【讨论】:

  • 抱歉,不清楚。我想在一列中获得 2018 年的分数,在另一列中获得 2017 年的分数。
【解决方案2】:

(编辑)我假设“分数”是记录数 - 如果您想对所有“答案”求和,则在下面的案例陈述中将 1 替换为 answer)

你的意思是这样的吗?

select 
  broker, 
  Results2017 = sum(case when Year=2017 then 1 else 0 end)
  Results2018 = sum(case when Year=2018 then 1 else 0 end)
from
  survey
where 
  Year in (2017,2018)
group by 
  broker
order by
  /* this will order by 2018 descending (3rd column) */
  3 desc

这应该给你:

broker  | Results2017  | Results2018
bob     |           2  |           4
Fred    |           6  |           2
Sue     |           4  |           1

【讨论】:

  • 谢谢!这就是我一直在寻找的。我将 SUM 更改为 AVG 并对 case 语句进行了更改,我得到了我想要的 :)
  • @Kimbo32 很高兴为您提供帮助 :)
猜你喜欢
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2011-08-17
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
相关资源
最近更新 更多