我最近在codility平台上做了一个测试,被下面的SQL问题卡住了。
问题:对于在线平台,对3个主题进行了评估,并提供了分数。
表:评估
输入:
|Id|experience|sql|algo|bug_fixing|
|1 |5 |100|null|100 |
|2 |1 |100|100 |null |
|3 |3 |100|null|50 |
|4 |5 |100|null|50 |
|5 |5 |100|100 |100 |
字符串
我们需要打印experience,count of students having a perfect score(null被认为是满分)作为max,count of students with that year of experience作为counts。结果将按经验年数降序打印。
输出量:
|experience|max|counts|
|5 |2 |3 |
|3 |0 |1 |
|1 |1 |1 |
型
我的解决方案:
With t1 as
(select experience,
count(experience) as max
from assessments
where (sql=100 or sql=null)
and (algo=100 or algo=null)
and (bug_fixing=100 or bug_fixing=null)
group by experience)
select a.experience,
t1.max,
count(a.experience) as counts
from assessments a join t1 on a.experience=t1.experience
group by a.experience
型
但是,我在第二列(max)的输出中得到了不正确的计数。
有人能告诉我代码中的错误或需要更正的地方吗?TIA。
3条答案
按热度按时间agxfikkp1#
您不需要子查询或
with
语句。使用filter
选项的聚合,例如:字符串
在db<>fiddle.中测试
请参阅文档中的更多信息。
a0zr77ik2#
答:
字符串
zaq34kh63#
感谢@klin,因为在此之前我不知道
filter
子句。下面是我用CASE语句的解决方案:字符串