2012-02-14 5 views
1

行戻す必要があります(正しい)、クエリがゼロ結果を返しますMARCH2010日付の行がない場合は、今すぐ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 

をが、たとえ結果がNULLであっても、行を返すようにしたいと思います。

+0

正常に何も返さず、その行に何が含まれていなければならないのですか? – JohnCambell

+0

戻ってきればNULLになります。 –

答えて

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テーブル全体が1列のヌル列で拡張され、結果に1行が表示されます
  • rightテーブルにn行がある場合、結果にはそれぞれn "列
+0

興味深いですが、次のエラーが表示されます:#1248 - すべての派生テーブルには別のエイリアスが必要です –

+0

@Homer_J - 結合テーブルの後にエイリアスを忘れました。私はそれを修正するために私の答えを更新しました。 –

0

私は絶対に肯定的ではありませんが、このケースのステートメントは機能するかもしれません。私はそれを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 
0

RES
AS SELECT((AVG(Q1)+ AVG(Q8)+ AVG(Q15))/ 3)tresults ID = から '1' と日付= 'MARCH2010' AND Q25 Q25 BY = '1' GROUP

UNION EXISTS NOTデュアル からすべて

SELECT NULL AS RES ( SELECT((AVG(Q1)+ AVG(Q8)+ AVG(Q15))/3)AS Restresults ID = FROM '1' 及びQ25 日付= 'MARCH2010' AND Q25 = '1' GROUP)

は常に第二の部分のbeacuse一列を返します。

関連する問題