2017-03-10 13 views
1

次のクエリはうまくいきますが、問題は常に結果を返します。空のセットを返すことはありません。特定の条件が満たされない場合に空のセットを取得する方法

SELECT sum(vmin_consumed) AS vmin 
FROM usageinfo 
WHERE job_end_time BETWEEN '2017-03-14' AND '2017-03-30' 
AND username='tytyjt' 

任意の条件が満たされない場合、それはNULLを返します。 (username='foo')が満たされていない場合、上記のクエリが空の結果セットを返すようにすることはできますか?

答えて

1

これを試してみてください:

SELECT p.* FROM (SELECT sum(vmin_consumed) AS vmin, username 
FROM usageinfo 
WHERE job_end_time BETWEEN '2017-03-14' AND '2017-03-30' AND username = "foo") p where p.username = "foo" 
+0

をしかし、これは特に更新された第2の条件 –

+0

回答を処理しません。 –

+0

最初の条件が失敗した場合でも空のセットを返します。 –

0

あなたはこれを必要とする、

SELECT IFNULL(SUM(vmin_consumed), '') AS vmin 
FROM usageinfo 
WHERE job_end_time BETWEEN '2017-03-14' AND '2017-03-30' 
AND username='tytyjt' 
+0

と言って: "SUM関数は、一連の値の合計を返します.SUM関数はNULL値を無視します。一致する行が見つからない場合、SUM関数はNULL値を返します。彼が必要としないもの –

0

これは本当に奇妙な要件である、この試してみてください。私は、これがパフォーマンスの原因となります認めざるを得ない

SELECT 
    SUM(
     CASE WHEN job_end_time BETWEEN '2017-03-14' AND '2017-03-30' THEN vmin_consumed -- The first condition is here. 
      ELSE null 
     END) AS vmin 
FROM usageinfo 
GROUP BY username 
HAVING username = 'tytyjt' -- The second condition is here. 

を大きなデータがあるときに問題が発生します。

0

はこのお試しください:

SELECT _TABLE.VMIN FROM (SELECT SUM(vmin_consumed) AS VMIN 
FROM usageinfo 
WHERE job_end_time BETWEEN '2017-03-14' AND '2017-03-30' AND _TABLE.username = 'tytyjt') 
_TABLE 
WHERE _TABLE.VMIN IS NOT NULL 
関連する問題