2013-10-14 3 views
0

В SQL есть выразительный способ подсчитать, сколько значения отличаются от 'x':Совокупные считать значения, равные постоянной

SELECT COUNT(NULLIF(col, 'x')) FROM table 

Я считаю, что менее элегантно рассчитывать значения, равные 'x':

  • SELECT COUNT(*) - COUNT(NULLIF(col, 'x')) FROM table
  • SELECT SUM(CASE WHEN col = 'x' THEN 1 ELSE 0 END) FROM table
  • [оракула]SELECT COUNT(DECODE(col,'x','x',NULL)) FROM table

Есть ли более элегантный способ сделать это?

+3

почему не 'SELECT COUNT (*) из таблицы, где столбец =«x''? –

+0

@ Roman: вы правы, вопрос кажется глупым. Но здесь мне нужно выполнить несколько подсчетов в одном запросе: 'select count_if (col, 'x'), count_if (col, 'y'), count_if (col, 'z') FROM table' – Benoit

+0

@Roman' select count (*) из таблицы, где col <> 'x'' не подсчитывает строки, где col равно null. –

ответ

4
SELECT 
    COUNT(CASE WHEN col='x' THEN 1 END) AS XCount, 
    COUNT(CASE WHEN col='y' THEN 1 END) AS YCount, 
    COUNT(CASE WHEN col='z' THEN 1 END) AS ZCount 
    FROM table 
+0

Мне это нравится, спасибо. – Benoit

0

Прямое способ сделать фильтрацию в предложении WHERE:

SELECT COUNT(*) FROM table WHERE col = 'x' 

EDIT:

Если вы не можете использовать где положение (потому что вы выполняете несколько счетчиков в том же ВЫБРАТЬ), то я думаю, что вы предложили себе самые элегантные. Мое личное предпочтение было бы SUM(CASE WHEN....

+0

, который отлично ответил на вопрос ... но, пожалуйста, см. Комментарий к вопросу, мне нужно больше одного счета в том же запросе. – Benoit

0

вкус это очень личная вещь, я хотел бы использовать этот синтаксис в Oracle:

select sum(decode(text,'x',0,1)) 
from table 
Смежные вопросы