select sum(orders) as total, count(*) as c, c/total as average
它給出了一個「錯誤代碼:1054未知列......」
有沒有辦法實現這個逆向引用不非常煩人的工作包裝選擇在另一個選擇?
我想這是一個重複,但我一直沒能找到它,所以,這是我會問這個問題。
select sum(orders) as total, count(*) as c, c/total as average
它給出了一個「錯誤代碼:1054未知列......」
有沒有辦法實現這個逆向引用不非常煩人的工作包裝選擇在另一個選擇?
我想這是一個重複,但我一直沒能找到它,所以,這是我會問這個問題。
別名列在查詢完成之前不存在,因此您不能在同一個查詢中使用它們。
只是重複表達式計算:
select
sum(orders) as total,
count(*) as c,
count(*)/sum(orders) as average
from
yourtable
還是做選擇,然後計算:
select
s.total, s.c, s.c/s.total as average
from
(select
sum(orders) as total,
count(*) as c
from <yourtable>) s
這兩種選擇都不可怕嗎?第一個是非DRY,需要重複計算工作量很大的工作(除非MySQL是魔術和緩存它),第二個難以維護,很難修改和使用(例如,我經常需要有時看到原始數據和有時包裝的數據,所以不得不來回或複製它,這又不是DRY) – djechlin
是的,它們都很臭,但這是它與大多數DBMSs一起工作的方式。 –
使用avg
功能:
select sum(orders) as total, count(*) as c, avg(orders) as average
基礎上列名,我假設你真的想要平均值而不是「1/average」作爲expr隱藏在你的問題中。
您需要重複表達式'count(*)/ sum(orders)' –
'AVG = SUM/COUNT' –
@MhalidJunaid,所以你必須計算所有的東西兩次,打破DRYness? – djechlin