我有这个简单的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
答案 0 :(得分:1)
您只需选择一行作为常量,然后将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行,每行都有一个额外的“常量”列答案 1 :(得分:0)
我不是绝对肯定的,但这个案例陈述可能有效。我无法测试它。
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
答案 2 :(得分:0)
选择
((AVG(q1)+ AVG(q8)+ AVG(q15))/ 3)AS Res
从结果来看
WHERE id ='1'AND date ='MARCH2010'AND q25 ='1'
GROUP BY q25
UNION ALL
SELECT NULL AS Res
来自双重
什么地方没有(
选择
((AVG(q1)+ AVG(q8)+ AVG(q15))/ 3)AS Res
从结果来看
WHERE id ='1'AND date ='MARCH2010'AND q25 ='1'
GROUP BY q25
)
总是会返回第二部分的一行。