4

10 進数の値を持つ 2 つのテーブルがあり、次のステートメントを使用して、それらをすべて加算して合計を取得できます。

SELECT(
(SELECT SUM(total) from recruitment where quote_id = 1)
+
(SELECT SUM(cost) from cost WHERE quote_id = 1)
)AS total

ただし、いずれかの選択が null を返す場合、合計は null なので、次のように ISNULL を使用して null ではなく 0 を返すようにしました。

SELECT(
(IFNULL(SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0)
+
(IFNULL(SELECT SUM(cost) FROM cost WHERE quote_id = 1),0)
)AS total

これはうまくいかなかったので、どうすればこれを行うのが最善の方法なのか疑問に思っていましたか?

4

3 に答える 3

6

COALESCE()null 以外の最初の引数を返す which を使用し、式全体をゼロに置き換えることができます。

SELECT(
  COALESCE((SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0)
  +
  COALESCE((SELECT SUM(cost) FROM cost WHERE quote_id = 1),0)
)AS total

IFNULL()この場合も同じように機能するはずです-構文エラーの原因となる括弧が間違っている可能性があります。

/* Should work too. Make sure the inner SELECT is enclosed in () */
SELECT(
  IFNULL((SELECT SUM(total) FROM recruitment WHERE quote_id = 1),0)
  +
  IFNULL((SELECT SUM(cost) FROM cost WHERE quote_id = 1),0)
)AS total
于 2012-10-29T13:12:42.733 に答える
3

使ってみてください

 SELECT(
(SELECT IFNULL((SELECT SUM(total) FROM recruitment WHERE quote_id=1),0))
+
(SELECT IFNULL((SELECT SUM(cost) FROM cost WHERE quote_id=1), 0))
)AS total

IFNULLSELECTのようなステートメント内で使用する必要がある構造です

SELECT IFNULL(expr0,expr1);

expr1の場合expr0に戻りNULLます。

于 2012-10-29T13:36:31.930 に答える
1

COALESCEまとめる前に使います。

SELECT ((SELECT SUM(COALESCE(total,0)) FROM recruitment WHERE quote_id = 1) +
        (SELECT SUM(COALESCE(cost,0)) FROM cost WHERE quote_id = 1)) AS TOtal
于 2012-10-29T13:13:10.197 に答える