1

次のクエリがあります。

SELECT 
  IF(COUNT(*) > 0, COUNT(*), '0') AS Found, 
  IF(NWLat, NWLat, '0')           AS NWLat, 
  IF(NWLon, NWLon, '0')           AS NWLon, 
  IF(SELat, SELat, '0')           AS SELat, 
  IF(SELon, SELon, '0')           AS SELon 
FROM s 
WHERE s.ci = '4' 
  AND s.snf = 'Ch'
GROUP BY s.sid 

現在、一致したクエリの行を返します。ただし、何も一致しない場合は何も返しません。何も見つからない場合、「Found: 0, NWLat: 0, NWLon: 0, SELat: 0, SELon: 0」を返すようにするにはどうすればよいですか?

4

3 に答える 3

1

MySQL ではそうしないほうがよいでしょう。SQLはそれについてではありません。クエリがレコードを返さない場合は、フロント エンド アプリケーションから簡単に 0 を出力できます。

ただし、これを行う必要がある場合は、次のようにすることができます。

SELECT 
  IF(COUNT(*) > 0, COUNT(*), '0') AS Found, 
  IF(NWLat, NWLat, '0')           AS NWLat, 
  IF(NWLon, NWLon, '0')           AS NWLon, 
  IF(SELat, SELat, '0')           AS SELat, 
  IF(SELon, SELon, '0')           AS SELon 
FROM s 
WHERE s.ci = '4' 
  AND s.snf = 'Ch'
GROUP BY s.sid 
UNION ALL
SELECT
  '0' AS Found, 
  '0' AS NWLat, 
  '0' AS NWLon, 
  '0' AS SELat, 
  '0' AS SELon 
FROM s 
WHERE NOT EXISTS(
    SELECT 
      IF(COUNT(*) > 0, COUNT(*), '0') AS Found, 
      IF(NWLat, NWLat, '0')           AS NWLat, 
      IF(NWLon, NWLon, '0')           AS NWLon, 
      IF(SELat, SELat, '0')           AS SELat, 
      IF(SELon, SELon, '0')           AS SELon 
    FROM s 
    WHERE s.ci = '4' 
    AND s.snf = 'Ch'
    GROUP BY s.sid
);

デモ:

于 2013-01-13T08:00:57.980 に答える
0

参考までに、本当にCOUNT(*)Of が 0 の場合、これはそのグループに行がないことを意味するため、結果に行が含まれることはありません0 を表示する行がないため、何の役にも立ちませIF(COUNT(*) > 0, COUNT(*), '0')ん。

他のifについては、次のようなものが必要だと思います:など。
SELECT (case when NWLat is null then 0 else NWLat end)
. . .
GROUP BY sid, (case when NWLat is null then 0 else NWLat end),

これにより、それらをグループに含めることができ、0 をグループとして表示できるようになります。

于 2013-01-13T07:39:48.390 に答える
0

最後のコメントですが、これを試してみませんか?ここでは、条件に基づいて必要なレコードがあるかどうかを判断するために、すべてをカウントする必要はありません。

SELECT     
case when NWLat is null then 0 else NWLat end AS NWLat, 
case when NWLon is null then 0 else NWLon end AS NWLon,
case when SELat is null then 0 else SELat end AS SELat,
case when SELon is null then 0 else SELon end AS SELon
FROM S
where NOT EXISTS(SELECT 1
             FROM s
             WHERE ci = 4 and snf = 'Ch')
GROUP BY sid, NWLon, SELat, SELon;
于 2013-01-13T07:41:38.693 に答える