[英]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.