簡體   English   中英

嘗試從兩個不同的表中加入列

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

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