1

次のクエリでは、最後の列にインスタンスの数が返されます。このインスタンスの数が 0 の場合、それらを「N/A」に置き換えますか?

このクエリは機能していないようです

select m.id, m.desc, count(IF(i.id is NULL,'N/A',i.id)) as quant
from menu m left join items i
on m.id = i.id
group by m.id
order by m.id;

上記のクエリは次のように出力されます

============================
m.id     |c.desc     | qaunt
============================
1234     | Shoes     | 1
1235     | Socks     | 2
1236     | Clothes   | 0
===========================

期待される結果:

============================
m.id     |m.desc     | qaunt
============================
1234     | Shoes     | 1
1235     | Socks     | 2
1236     | Clothes   | N/A
===========================

上記のクエリの変更点を教えてください

4

4 に答える 4

3

(これはテスト済みです) あなたのクエリは if の結果をカウントしていますが、その逆が必要だと思います。私は IFNULL と NULLIF のペアを使用しています。これらは一緒に「カウントがゼロの場合、それを NULL に変換します。次に、NULL の場合は、この列に「N/A」を使用します。

select m.id, m.desc, 
IFNULL(NULLIF(count(i.id), 0), "N/A") as quant
from menu m left join items i
on m.id = i.id
group by m.id
order by m.id;

mysql のペダンティックにするために、cast() を介して列が常に文字列であることを確認できます。

IFNULL(NULLIF(CAST(count(i.id) AS char), "0"), "N/A") as quant

これには、1 回だけカウントし、サブクエリがないという利点があります。

于 2012-11-01T21:13:48.853 に答える
2

試してみませんか

select m.id, m.desc, if(count(i.id) = 0,'N/A',count(i.id))) as quant
from menu m left join items i
on m.id = i.id
group by m.id
order by m.id;
于 2012-11-01T21:11:58.480 に答える
0

NULLと0は同じではありません

select m.id, m.desc, count(IF(i.id = 0,'N/A',i.id)) as quant
from menu m left join items i
on m.id = i.id
group by m.id
order by m.id;
于 2012-11-01T21:15:07.927 に答える