首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找SQLZOO教程#8的官方答案的解释

寻找SQLZOO教程#8的官方答案的解释
EN

Stack Overflow用户
提问于 2020-11-20 00:22:42
回答 2查看 503关注 0票数 0

当我在SQLZOO中进行实践时,存在一个问题。问题如下:

#8显示了'Q01‘曼彻斯特机构的机构、样本总数和计算学生人数。(https://sqlzoo.net/wiki/NSS_Tutorial)

我的回答是:

代码语言:javascript
复制
SELECT institution,sum(sample),count(DISTINCT ukprn)
from nss
where institution like '%Manchester%'
AND question = 'Q01'
AND subject ='(8) Computer Science'
Group by institution;

我在网上找到的正确答案是:

代码语言:javascript
复制
SELECT institution, SUM(sample), 
(SELECT sample FROM nss y
WHERE subject='(8) Computer Science'
AND x.institution = y.institution
AND question='Q01') AS comp
FROM nss x
WHERE question='Q01'
AND (institution LIKE '%Manchester%')
GROUP BY institution;

我不知道为什么我的条款错了。为什么在SELECT部分使用子查询?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-11-20 01:22:24

这个教程太可怕了,我花了半个小时才理解了一个表格的结构和数据,这个问题的表述非常糟糕,不管怎么说,他们真正想看到的是两个数字,首先:

所有学生的总样本量均为每个机构的Q01 (总计,不仅仅是计算机科学),这可以通过以下方法解决:

代码语言:javascript
复制
SELECT institution,sum(sample)
from nss
where institution like '%Manchester%'
AND question = 'Q01'
Group by institution;

现在,第二部分,对于每个机构,他们希望看到有多少计算机科学学生回答了Q01,所以我们可以在查询中添加case

代码语言:javascript
复制
SELECT institution,sum(sample),sum(case when subject ='(8) Computer Science' then sample else 0 end)
from nss
where institution like '%Manchester%'
AND question = 'Q01'
Group by institution;

这是正确的答案,现在对于您找到的关于查询的问题,它通过使用子查询来实现相同的case,这也是可能的,但可能会稍微慢一点。

票数 0
EN

Stack Overflow用户

发布于 2020-11-20 01:23:31

问题是,计算机科学上的过滤器被应用于这两个计算值。但你不想把它作为样本。

如果我明白这个问题,你想:

代码语言:javascript
复制
select institution, sum(sample),
       count(distinct case when subject = '(8) Computer Science' then ukprn end)
from nss
where institution like '%Manchester%' and 
      question = 'Q01' 
group by institution;

对于这个问题,子查询似乎过于复杂。

事实上,我猜没有人接受过一次以上的调查,所以对于一个学生来说没有重复。在这种情况下,count(distinct)只是浪费了开销,所以请使用:

代码语言:javascript
复制
select institution, sum(sample),
       sum(case when subject = '(8) Computer Science' then 1 else 0 end)
from nss
where institution like '%Manchester%' and 
      question = 'Q01' 
group by institution;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64921991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档