2013-12-19 6 views
0

У меня есть база данных, как это:SQL группа по и подсчитывают значение

id | name | type | approval 
1 | a | red | 0 
2 | b | blue | null 
3 | c | grey | 1 
4 | d | red | null 
5 | e | blue | 1 
6 | f | grey | 1 

И потом, я хочу, выход которой сосчитать каждое значение утверждения (нуль: ожидающий, 0: отказано, 1: утвержден) как это:

type | pending | denied | approved 
red | 1 | 1 | 0 
blue | 1 | 0 | 1 
grey | 0 | 0 | 2 

Я не являюсь экспертом в области sql, могу ли я создать такой вывод, используя sql? если да, скажите, пожалуйста. И если вам нужен какой-то язык программирования, пожалуйста, скажите мне тоже. Благодарю.

+1

Какие именно СУБД? – Szymon

ответ

1

Попробуйте это:

select type, 
     sum(if(approval is null, 1, 0)) as pending, 
     sum(if(approval=0, 1, 0)) as denied, 
     sum(if(approval=1, 1, 0)) as approval 
    from test 
    group by type 

Посмотрите на скрипке: http://sqlfiddle.com/#!2/a9348e/4

И если вы хотите точный порядок? add order by if(type='red', 1 ,if(type='blue',2,3))

+1

Это здорово, спасибо @Jorge – andrefadila