我正在学习SQL加入,想清楚一个想法。 我知道所有选择列都应该出现在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子句中吗?
答案 0 :(得分:2)
如果您具有分析功能,则group by子句是neede。简单的例子:
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()),并且不要使用组中的列by语句不在select子句中。 加入时不会改变。分组完全独立于连接。唯一重要的是,你使用哪些列。
答案 1 :(得分:1)
加入表格时,您可以使用JOIN
- 语句代替
查询示例:
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
,这就是您要获得的全部内容。
关于GROUP BY
的SO的另一个答案值得一读。 :)
https://stackoverflow.com/a/1591976/1025823