簡體   English   中英

在連接多個表和查詢時將字段放在select子句中的規則具有group by子句

[英]Rule to put fields in select clause when joining multiple tables and query has group by clause

我正在學習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子句中嗎?

如果您具有分析功能,則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()),並且不要在group by語句中使用列在select子句中也不存在。 加入時不會改變。 分組完全獨立於連接。 唯一重要的是,您使用哪些列。

連接表時,您可以使用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 ,這就是你t1.a全部。

關於GROUP BY SO的另一個答案值得一讀。 :) https://stackoverflow.com/a/1591976/1025823

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM