我想在第一個和第二個半場進行足球比賽中的所有進球,但是我只有第一個半場和最後一個得分的數據。SQL別名不起作用
SELECT SUM(scorehome_ht + scoreguest_ht) AS halftime,
(SUM(scorehome_end + scoreguest_end) - halftime) AS end
FROM matches;
我是新的計算器,不熟悉MySQL的,是的,我用谷歌:)
我想在第一個和第二個半場進行足球比賽中的所有進球,但是我只有第一個半場和最後一個得分的數據。SQL別名不起作用
SELECT SUM(scorehome_ht + scoreguest_ht) AS halftime,
(SUM(scorehome_end + scoreguest_end) - halftime) AS end
FROM matches;
我是新的計算器,不熟悉MySQL的,是的,我用谷歌:)
分配到一個山坳的別名umn不能被SELECT列表中的另一個表達式引用。
一種解決方法是重複表達式,而且就性能而言通常效率最高。
SELECT SUM(scorehome_ht + scoreguest_ht) AS halftime,
SUM(scorehome_end + scoreguest_end) - SUM(scorehome_ht + scoreguest_ht) AS end
FROM matches;
我說,這是一個解決辦法,因爲有一些其他的變通辦法可用。也可以使用內聯視圖,因爲查詢需要通過分配給每列的名稱來引用內聯視圖中的列。這種方法需要MySQL運行內聯視圖查詢,並將其實現爲臨時MyISAM表,然後外部查詢針對MyISAM表運行,所以這種方法效率較低。
另一種選擇是使用MySQL的用戶變量來保存表達式的結果:
SELECT @halftime := SUM(scorehome_ht + scoreguest_ht) AS halftime,
SUM(scorehome_end + scoreguest_end) - @halftime AS end
FROM matches;
但這種行爲是依靠無證行爲; MySQL按照它們列出的順序處理SELECT列表中的表達式,因此賦值後的表達式中可以使用賦值爲@halftime
的值。 (對@halftime的引用在賦值之前將得到前一個賦值的任何值(如從前一行)
之前,您不能在同一個SELECT查詢中使用別名,但你可以做的是包裝他們在派生表:
SELECT halftime, scorehome_end + scoreguest_end - halftime AS end
FROM
(
SELECT scorehome_end,
scoreguest_end,
SUM(scorehome_ht + scoreguest_ht) AS halftime
FROM matches
) x;
你可以不喜歡它
SELECT SUM(scorehome_ht + scoreguest_ht) AS halftime,
SUM(scorehome_end + scoreguest_end) - SUM(scorehome_ht + scoreguest_ht) AS end
FROM matches;
你會得到一些錯誤嗎? – Ejaz
未知列'halftime'in'field list' – user3236231