[英]Trying to JOIN columns from two different tables
我有一張表(city_data),其中包含“year”、“city_name”和“avg_temp”列。 另一個表是 global_data 並具有列“avg_temp”和“year”。 我正在嘗試創建一個具有倫敦平均溫度的表格,即多年來的全球平均溫度。 我的 SQL 代碼如下:
SELECT city_data.avg_temp, city_data.year
FROM city_data
JOIN global_data
ON city_data.year = global_data.avg_temp
WHERE city= 'Paris'
我沒有收到錯誤,但無法獲得預期的結果。 我想我無法理解我需要在 ON 子句中添加什么。
FROM city_data
JOIN global_data
ON city_data.year = global_data.year
-- Join 中應該是global_data.year
WHERE city= 'Paris'
這完全基於部分理解
SELECT city_name, AVG(city_data.avg_temp) as global_avg
FROM
city_data
JOIN global_data
ON city_data.year = global_data.year
WHERE city_name = 'Paris'
GROUP BY city_data.city_name
由於year
是唯一的共同屬性,因此使用它進行連接。 然后獲取城市平均表,因為它在city_data
中很容易獲得。 最后做global_data
的 avg ,因為你想跨年獲取它。
SELECT `city_name`, `city_data`.`avg_temp` AS city_avg_temp, AVG(`global_data`.`avg_temp`) AS global_avg_temp
FROM `city_data`
JOIN `global_data`
ON `city_data`.`year` = `global_data`.`year`
WHERE `city_name` = 'London'
GROUP BY `city_data`.`city_name`
我想表global_data
每年有一行,而city_data
每年有一行,城市。 這意味着您可以簡單地在他們共同的年份加入兩者:
select year, g.avg_temp as global_average, c.avg_temp as paris_average
from global_data g
join city_data c using (year)
where c.city = 'Paris'
order by year;
如果你不喜歡加入兩者然后才提到巴黎,你也可以把它變成:
select year, g.avg_temp as global_average, p.avg_temp as paris_average
from global_data g
join (select * from city_data where city = 'Paris') p using (year)
order by year;
從 MySQL 8 開始,您甚至可以使用WITH
子句來“准備”巴黎:-)
with paris as (select * from city_data where city = 'Paris')
select year, g.avg_temp as global_average, paris.avg_temp as paris_average
from global_data g
join paris using (year)
order by year;
或將巴黎視為加入標准:
select g.year, g.avg_temp as global_average, p.avg_temp as paris_average
from global_data g
join city_data p on p.year = g.year and p.city = 'Paris'
order by g.year;
如您所見,編寫相同查詢的方法有很多種,並且 DBMS 可能會為所有人提供相同的執行計划。 因此,只需選擇您最喜歡的查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.