2016-12-07 55 views
1

我似乎無法找到一種方法如何組合/加入的,因爲我在何處及以要求兩個簡單的SQL結果的查詢。連接兩個不同的MySQL結果查詢通過追加新的列

簡單地說,我想這個查詢的結果是:

SELECT Nationality, MAX(ActorName) as Oldest, 
FROM ACTOR 
WHERE BirthDate IN 
(SELECT MIN(BirthDate) as MinBday FROM ACTOR GROUP BY Nationality) 
GROUP BY Nationality 

導致此:

SELECT Nationality, MAX(ActorName) as Oldest, 
FROM ACTOR 
WHERE BirthDate IN 
(SELECT MAX(BirthDate) as MinBday FROM ACTOR GROUP BY Nationality) 
GROUP BY Nationality 

+------------+--------------+ 
| nationality| oldest  | 
+------------+--------------+ 
| american | brad pitt | 
+------------+--------------+ 
| british | pierce bro | 
+------------+--------------+ 
| italian | monica bellu | 
+------------+--------------+ 

與此查詢的結果可以加入這會導致這樣的:

+------------+--------------+ 
| nationality| youngest  | 
+------------+--------------+ 
| american | angelina j | 
+------------+--------------+ 
| british | jason stat | 
+------------+--------------+ 
| italian | paul gia  | 
+------------+--------------+ 

,以便具有所得表如下:

+------------+--------------+--------------+ 
|nationality | oldest  | youngest  | 
+------------+--------------+--------------+ 
| american | brad pitt | angelina j | 
+------------+--------------+--------------+ 
| british | pierce bro | jason stat | 
+------------+--------------+--------------+ 
| italian | monica bellu | paul gia  | 
+------------+--------------+--------------+ 

注:2個查詢之間的唯一區別是MIN(出生日期),用於最古老的出生日期,和MAX(出生日期),用於最小的生日。

回答

0

一個非常醜陋的SQL可以跟隨,不是最有效的,只是一個方法。

SELECT 
    t1.Nationality, t1.Oldest, t2.youngest 
FROM (
    SELECT Nationality, MAX(ActorName) as Oldest -- , 
    FROM ACTOR 
    WHERE BirthDate IN 
    (SELECT MIN(BirthDate) as MinBday FROM ACTOR GROUP BY Nationality) 
    GROUP BY Nationality 
) t1 
JOIN (
    SELECT Nationality, MAX(ActorName) as youngest 
    FROM ACTOR 
    WHERE BirthDate IN 
    (SELECT MAX(BirthDate) as MaxBday FROM ACTOR GROUP BY Nationality) 
    GROUP BY Nationality 
) t2 ON t1.Nationality = t2.Nationality 

或嘗試此(未測試):

SELECT 
    Nationality, 
    MAX(CASE WHEN BirthDate = t1.MinBday THEN ActorName ELSE NULL END) as Oldest, 
    MAX(CASE WHEN BirthDate = t1.MaxBday THEN ActorName ELSE NULL END) as youngest 
FROM ACTOR 
JOIN (
    SELECT Nationality, MIN(BirthDate) as MinBday, MAX(BirthDate) as MaxBday 
    FROM ACTOR GROUP BY Nationality) t 
ON ACTOR.Nationality = t.Nationality 
GROUP BY Nationality 
+0

希望的是直接的(即使醜陋)答案像這樣的工作,但我忘了我在微軟Access這樣做的,有人原因查詢這樣總是結了:'語法錯誤在FROM clause' – jmigdelacruz

+0

@jmigdelacruz更新我的回答,只是多了一個逗號之前'from'。 – Blank

+0

謝謝@forward!第一個查詢效果很好。只是改變了,'加入'到'左連接',並從'最舊 - '中刪除' - ,' – jmigdelacruz

0

你可以得到的生日,可與直接加入像

SELECT a.Nationality, MAX(a.ActorName) as Oldest, 
FROM ACTOR a 
JOIN (SELECT Nationality, 
MIN(BirthDate) as MinBday, 
MAX(BirthDate) as MaxBday 
    FROM ACTOR 
    GROUP BY Nationality) xxx 
ON a.Nationality = xxx.Nationality 
AND (a.BirthDate = xxx.MinBday OR a.BirthDate = xxx.MaxBday) 
GROUP BY Nationality; 
相關問題