簡體   English   中英

返回MySQL聯合查詢的其他列值

[英]Return additional column value for MySQL Union Query

我有兩個查詢得到:

  1. 最近的降雪測量(1小時內)
  2. 並在24小時前進行了測量。

當我對查詢進行UNION ,我期望這兩個度量位於單獨的列中,但實際上它們是在單獨的(重復的)行中返回的。 請參見下面的輸出。

SELECT snowfall.cms as now_snow, resorts.*, regions.name
FROM  snowfall
INNER JOIN resorts on resorts.id = snowfall.resort_id
INNER JOIN  regions ON resorts.region_id = regions.id
WHERE snowfall.timestamp >= SUBDATE( NOW( ) , INTERVAL 1 HOUR )
GROUP BY resorts.id
UNION
SELECT snowfall.cms as 24hr_snow, resorts.*, regions.name
FROM  snowfall
INNER JOIN resorts on resorts.id = snowfall.resort_id
INNER JOIN  regions ON resorts.region_id = regions.id
WHERE snowfall.timestamp >= SUBDATE( NOW() , INTERVAL 1 DAY)
GROUP BY resorts.id
ORDER BY now_snow DESC

我得到的結果是:

now_snow | resorts.name | ...
========================================
20       | The Mountain
15       | The Mountain
18       | The Hill
102      | The Hill

但是期待的結果是:

now_snow | 24hr_snow | resorts.name | ...
========================================
20       | 15        | The Mountain
18       | 102       | The Hill

在這種情況下UNION是否正確? 如何獲得所需的輸出?

UNION會將行追加到查詢中。 為了擴大您的查詢,您需要一個聯接。

我建議在這種情況下進行自我加入。 每天降雪一次,每小時降雪一次。 兩者都加入度假村ID並按度假村名稱分組。

SELECT sum(hourly.cms) as now_snow, sum(daily.cms) as 24hr_snow, resorts.name
FROM  
  snowfall daily
  INNER JOIN resorts on resorts.id = daily.resort_id
  INNER JOIN regions ON resorts.region_id = regions.id
  INNER JOIN snowfall hourly on resorts.id = hourly.resort_id
WHERE daily.timestamp >= SUBDATE( NOW() , INTERVAL 1 DAY)
  AND hourly.timestamp >= SUBDATE( NOW( ) , INTERVAL 1 HOUR )
GROUP BY resorts.name
ORDER BY now_snow DESC

您沒有在帖子中使用聚合,而mysql可能允許這樣做,但是為了清楚起見,在此添加了聚合。

暫無
暫無

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

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