1

レコードがnullの場合、SQLではどのように0を表示しますか?

select sales_id, totalbuy, totalsell, totalbuy + totalsell as total from
(select sales_id, SUM(CASE WHEN side= 'buy' THEN 1 ELSE 0 END) AS totalbuy, 
SUM(CASE WHEN side= 'sell' THEN 1 ELSE 0 END) AS totalsell 
from car_orders 
where sales_id in ('sales1', 'sales2', 'sales3', 'sales4')only
GROUP BY sales_id)q
order by total desc
limit 0, 10;

car_ordersinsert*(car_orders+ISNULL(car_orders,0)) を試した後、エラーが発生しました。

4

2 に答える 2

1

Sohneeの答えから構築すると、使用したいと思うSQLは次のとおりです。

SELECT 
    sales_id,
    IFNULL(totalbuy, 0),
    IFNULL(totalsell, 0),
    IFNULL(totalbuy, 0) + IFNULL(totalsell, 0) as total
FROM
(
    SELECT
        sid as sales_id,
        SUM(CASE WHEN side = 'buy' THEN 1 ELSE 0 END) AS totalbuy, 
        SUM(CASE WHEN side = 'sell' THEN 1 ELSE 0 END) AS totalsell 
    FROM 
        ( SELECT 'sales1' as sid UNION SELECT 'sales2' UNION SELECT 'sales3' UNION SELECT 'sales4' ) mysalesids
    LEFT OUTER JOIN car_orders
      ON sales_id = sid
    GROUP BY
       sales_id
) q
ORDER BY total DESC
LIMIT 0, 10;

上記の鍵は「LEFT OUTER JOIN」です。独自のテーブルに「sales1」、「sales2」、「sales3」の値を含めることができる場合は、副選択を行うよりもその方が望ましいでしょう。

お役に立てれば、

ジョン...

于 2012-11-01T17:32:39.727 に答える
1

を使用する場合+、両方の引数が同じ型である必要があります。あなたの質問からは何carが何なのかわかりませんが、 と互換性がないと思い0ます。

CONCATこれらの場合に使用することをお勧めします。

CONCAT(car, IFNULL(car_orders, 0))

がテーブルの場合car_orders、ここでは無効です。列を使用する必要があります。car_orders.MyColumn

IFNULL の使用方法

クエリが与えられた場合、次のように IFNULL を使用することを購入すると、ここで null になることはないと思います。

SELECT 
    sales_id,
    IFNULL(totalbuy, 0),
    IFNULL(totalsell, 0),
    IFNULL(totalbuy, 0) + IFNULL(totalsell, 0) as total
FROM
(
    SELECT
        sales_id,
        SUM(CASE WHEN side = 'buy' THEN 1 ELSE 0 END) AS totalbuy, 
        SUM(CASE WHEN side = 'sell' THEN 1 ELSE 0 END) AS totalsell 
    FROM
        car_orders 
    WHERE
        sales_id in ('sales1', 'sales2', 'sales3', 'sales4')
    GROUP BY
       sales_id
) q
ORDER BY total DESC
LIMIT 0, 10;
于 2012-11-01T17:08:57.323 に答える