SQL Distinct Count с исключением - PullRequest
       20

SQL Distinct Count с исключением

1 голос
/ 27 августа 2009

Я пытаюсь подсчитать, сколько существует различного значения FLOOR, но я не хочу, чтобы значение "B" учитывалось в сумме.

Вот мой текущий код. Он подсчитывает количество отдельных этажей, но включает ЭТАЖ "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 с кодом, который я разместил.

Спасибо.

Ответы [ 3 ]

10 голосов
/ 27 августа 2009
SELECT COUNT(DISTINCT FLOOR) as NB_FLOORS FROM TABLE_ID WHERE FLOOR <> 'B'
0 голосов
/ 27 августа 2009

Если вы хотите более общее решение, используйте регулярное выражение

ВЫБЕРИТЕ COUNT (РАЗЛИЧНЫЙ ЭТАЖ) как NB_FLOORS ОТ TABLE_ID, ГДЕ ЭТАЖ REGEXP '[0-9]'

0 голосов
/ 27 августа 2009

Вот решение, основанное на 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;
...