1

FLOORの個別の値がいくつあるかをカウントしようとしていますが、値「B」を合計にカウントしたくありません。

これが私の現在のコードです。個別のフロアがいくつあるかをカウントしますが、フロアが1つある場合は「B」が含まれます。

 SELECT COUNT(DISTINCT FLOOR) as NB_FLOORS FROM TABLE_ID

テーブルは次のようになります。

 FLOOR     ROOM
 B         Bedroom
 1         Kitchen
 1         Bathroom
 2         Bedroom
 2         Bedroom

この場合の結果は、2つのフロアがあるため2になります(「B」はフロアとしてカウントされない地下室です)。私は現在、投稿したコードで3を取得しています。

ありがとう。

4

3 に答える 3

10
SELECT COUNT(DISTINCT FLOOR) as NB_FLOORS FROM TABLE_ID WHERE FLOOR <> 'B'
于 2009-08-27T18:37:00.187 に答える
0

より一般的な解決策が必要な場合は、正規表現を使用してください

SELECT COUNT(DISTINCT FLOOR)as NB_FLOORS FROM TABLE_ID WHERE FLOOR REGEXP'[0-9]'

于 2009-08-27T18:46:23.647 に答える
0

COUNT()NULLを無視することに依存するソリューションは次のとおりです。

SELECT COUNT(DISTINCT CASE FLOOR = 'B' THEN NULL ELSE FLOOR END) AS NB_FLOORS
FROM TABLE_ID;

別の考え:フロア番号は常に1から始まり、番号をスキップしないと仮定すると、単純にMAX():を返すことができます。

SELECT MAX(FLOOR) AS NB_FLOORS FROM TABLE_ID;
于 2009-08-27T18:42:54.853 に答える