我目前正在制作模拟试卷,但是我没有正确的答案,我不确定这个SQL查询的正确答案是什么。
给出一张表:
foo, bar
a , 1
b , 3
a , 2
c , 1
和查询:
SELECT foo, sum(bar)
FROM table
GROUP BY foo
我可以看到这两种方式:
a 3
a 3
b 3
c 1
或
a 3
b 3
c 1
感谢。
答案 0 :(得分:6)
这将是最后一个。
GROUP BY
会使该集合分组为foo
- 每行一行。 SUM
聚合函数将对bar
列的值进行求和。
答案 1 :(得分:3)
GROUP BY组合GROUP BY中具有相同值名称的所有行。 SUM告诉查询如何处理GROUP BY中未命名的值。
foo, bar
a , 1
b , 3
a , 2
c , 1
SELECT foo, sum(bar)
FROM table
GROUP BY foo
所以你会得到每一个foo的一行:a,b和c,它将为这些组中的每个组的条形值求和:a(1 + 2),b(1),c(1)< / p>
并产生第二个结果集:
a 3
b 3
c 1
由于这是家庭作业,你需要学习:
FROM 和加入确定&amp;过滤行
WHERE 行上的更多过滤器
GROUP BY 将这些行组合成组
HAVING 过滤群组
ORDER BY 排列剩余的行/组
答案 2 :(得分:2)
这一个:
SELECT foo, sum(bar)
FROM table
GROUP BY
foo
会给:
a 3
b 3
c 1
这一个:
SELECT foo, SUM(bar) OVER (PARTITION BY foo)
FROM table
会给:
a 3
a 3
b 3
c 1
答案 3 :(得分:2)
小组将首先生效,所以“计算”将会像这样
首先对foo值的所有行进行分组。给你
然后根据聚合函数和为每个组生成结果行。这是对每个组的条形值的总结,即
答案 4 :(得分:1)
查询:
select foo, sum(bar)
from table
group by foo
将为您提供第二组输出:
a 3
b 3
c 1
但不一定按此顺序。它也可能以任何其他顺序为您提供这三行。 group by
子句不强制返回行的顺序。