![](/img/trans.png)
[英]SQL Query to return the instance of a column value but return additional fields
[英]Return additional column value for MySQL Union Query
我有兩個查詢得到:
當我對查詢進行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.