这个SQL查询的结果是什么?

时间:2010-05-07 11:49:06

标签: sql

我目前正在制作模拟试卷,但是我没有正确的答案,我不确定这个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

感谢。

5 个答案:

答案 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值的所有行进行分组。给你

  • group1:a,1        一个,2
  • group2:b,3
  • group3:c,1

然后根据聚合函数和为每个组生成结果行。这是对每个组的条形值的总结,即

  • A,3
  • B,3
  • C,1

答案 4 :(得分:1)

查询:

select foo, sum(bar)
from table
group by foo

将为您提供第二组输出:

a 3
b 3
c 1

但不一定按此顺序。它也可能以任何其他顺序为您提供这三行。 group by子句不强制返回行的顺序。