MySQL函数,必须带回一行
我有一个简单的MySQL语句:MySQL函数,必须带回一行,mysql,null,Mysql,Null,我有一个简单的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 现在,如果没有日期为2010年3月2日的行,那么查询将返回零个结果,这是正确的,但我希望它返回一行-即使结果为空。我不是绝对肯定的,但是这个case语句可能会起作用。我不能在atm机
SELECT
((AVG(q1) + AVG(q8) + AVG(q15)) / 3 ) AS Res
FROM tresults
WHERE id = '1' AND date = 'MARCH2010' AND q25 = '1'
GROUP BY q25
现在,如果没有日期为2010年3月2日的行,那么查询将返回零个结果,这是正确的,但我希望它返回一行-即使结果为空。我不是绝对肯定的,但是这个case语句可能会起作用。我不能在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
我不是绝对肯定,但这个案例陈述可能有效。我不能在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
挑选
AVGq1+AVGq8+AVGq15/3作为Res
来自tresults
其中id为“1”,日期为“2010年3月2日”,q25为“1”
按q25分组
联合所有
选择NULL作为Res
来自双重
不存在的地方
选择
AVGq1+AVGq8+AVGq15/3作为Res
来自tresults
其中id为“1”,日期为“2010年3月2日”,q25为“1”
按q25分组
由于第二部分,将始终返回一行。选择
AVGq1+AVGq8+AVGq15/3作为Res
来自tresults
其中id为“1”,日期为“2010年3月2日”,q25为“1”
按q25分组
联合所有
选择NULL作为Res
来自双重
不存在的地方
选择
AVGq1+AVGq8+AVGq15/3作为Res
来自tresults
其中id为“1”,日期为“2010年3月2日”,q25为“1”
按q25分组
由于第二部分,将始终返回一行。您只需选择一行作为常量,然后将其左键连接到结果集:
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
工作原理:
选择您的常量,因为常量始终返回一行
左联接始终至少返回一次左表中的所有行
如果右表没有行,则整个左表将扩展为一组空列,结果只有一行
如果右表有n行,则结果有n行,每行都有一个额外的常量列
您只需选择一行作为常量,然后将其左键连接到结果集:
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
工作原理:
选择您的常量,因为常量始终返回一行
左联接始终至少返回一次左表中的所有行
如果右表没有行,则整个左表将扩展为一组空列,结果只有一行
如果右表有n行,则结果有n行,每行都有一个额外的常量列
如果正确返回none,为什么要它返回一行,该行应该包含什么?返回NULL就可以了。如果正确返回none,为什么要它返回一行,该行应该包含什么?返回NULL就可以了。看起来很有趣-但是,我得到以下错误:1248-每个派生表都必须有自己的alias@Homer_J-我忘记了联接表后面的别名;我已经更新了我的答案来解决这个问题。看起来很有趣-但是,我得到了以下错误:1248-每个派生表都必须有自己的表alias@Homer_J-我忘记了联接表后面的别名;我已经更新了我的答案来解决这个问题。