1

我正在学习 sql join 并想明确一个想法。我知道所有选择列都应该出现在 group by 子句中。例如,

select a, b
from table_one
group by a,b;

我想加入两个表,类似于这个 -

select table_one.a
from table_one, table_two
where table_one.id = table_two.id
group by table_two.c

问题是 - 我应该把 table_two.c 放在 select 中,因为它在 group by 子句中吗?

4

2 回答 2

2

如果您有分析功能,则需要一个 group by 子句。简单的例子:

select order_date, sum(orders)
from orders_table
group by order_date;

从逻辑上讲,仅对列进行分组,这些列也在您的 select 子句中。否则,您可能会为最终用户提供奇怪的数据。例子:

select order_date, sum(orders)
from orders
group by country. order_date;

这将为每个日期和国家/地区提供单独的行,但您只能在结果中看到日期。

所以简单的规则是:将所有不使用分析函数(即 min()、max()、avg()、count())的列添加到 group by 语句中,并且不使用 group by 语句中的列也不存在于 select 子句中。这在加入时不会改变。分组完全独立于连接。唯一重要的是,您使用哪些列。

于 2013-11-15T08:39:23.923 回答
1

加入表时,您可以改用JOIN-statements

您的查询示例:

SELECT t1.a
FROM table_one t1 /*(t1 is the alias for the table)*/
INNER JOIN table_two t2 ON t1.id = t2.id
GROUP BY t2.c

t2.c如果您不特别希望它出现在结果中,则无需将其放入您的选择中。由于您只选择t1.a,这就是您将得到的全部。

关于 SO 的另一个答案GROUP BY也值得一读。:) https://stackoverflow.com/a/1591976/1025823

于 2013-11-15T08:34:04.903 回答