我有這個簡單的MySQL聲明:MySQL的功能,必須帶回一排
SELECT
((AVG(q1) + AVG(q8) + AVG(q15))/3) AS Res
FROM tresults
WHERE id = '1' AND date = 'MARCH2010' AND q25 = '1'
GROUP BY q25
現在,如果有與MARCH2010,則查詢返回結果爲零的日期(這是正確的)無行,但我希望它返回一行 - 即使結果是NULL。
我有這個簡單的MySQL聲明:MySQL的功能,必須帶回一排
SELECT
((AVG(q1) + AVG(q8) + AVG(q15))/3) AS Res
FROM tresults
WHERE id = '1' AND date = 'MARCH2010' AND q25 = '1'
GROUP BY q25
現在,如果有與MARCH2010,則查詢返回結果爲零的日期(這是正確的)無行,但我希望它返回一行 - 即使結果是NULL。
你可以只選擇一個單列爲一個常數,然後將其left join
到結果集:
select l.*, r.*
from (select "your constant" as constant) as l
left join (
SELECT
((AVG(q1) + AVG(q8) + AVG(q15))/3) AS Res
FROM tresults
WHERE id = '1' AND date = 'MARCH2010' AND q25 = '1'
GROUP BY q25
) as r on 1
這是如何工作的:
select "your constant" as constant
總是返回單行left join
總是返回left
表中的所有行至少一次right
表沒有行,那麼整個left
表擴展了一堆空列,結果有一行right
表有n行,結果有n行,每行都有一個額外的「你的常量「列看起來很有趣 - 但是,我得到以下錯誤:#1248 - 每個派生表都必須具有自己的別名 – 2012-02-14 15:38:51
@Homer_J - 我在連接表後面忘記了一個別名;我已經更新了我的答案來解決這個問題。 – 2012-02-14 15:42:18
我不是絕對肯定的,但這種情況下的聲明可能工作。我無法測試它atm。
Case When
(SELECT
Count(*)
FROM tresults
WHERE id = '1' AND date = 'MARCH2010' AND q25 = '1'
GROUP BY q25) > 0
Then
SELECT
((AVG(q1) + AVG(q8) + AVG(q15))/3) AS Res
FROM tresults
WHERE id = '1' AND date = 'MARCH2010' AND q25 = '1'
GROUP BY q25
Else
SELECT null
End
SELECT ((AVG(Q1)+ AVG(Q8)+ AVG(Q15))/ 3)AS RES
FROM tresults WHERE ID = '1' AND日期= 'MARCH2010' AND Q25 = '1' GROUP BY Q25
UNION ALL
SELECT NULL AS RES FROM雙 WHERE NOT EXISTS( SELECT ((AVG(Q1)+ AVG(Q8)+ AVG(Q15))/3)AS Res
FROM tresults WHERE ID = '1' 和日期= 'MARCH2010' AND Q25 = '1' GROUP BY Q25 )
總是會返回一個行怎麼一回事,因爲第二部分。
爲什麼你希望它返回一行,如果它正確地返回一個沒有,該行應該包含什麼? – JohnCambell 2012-02-14 15:17:55
返回NULL將會很好。 – 2012-02-14 15:20:30