[Oracle] Посчитать количество определенных значений в таблице
От: Аноним  
Дата: 12.06.13 17:49
Оценка:
Привет.

Есть таблица с полем state. Нужно посчитать сколько каждого state присутствует. Требуется выбрать количество нужных значений в переменные + выбрать count(*).

Что-то типа:
select count(*), count(where state = 0), count(where state = 1)... into l_total, l_zero, l_one,.. from t
Re: [Oracle] Посчитать количество определенных значений в таблице
От: Аноним  
Дата: 12.06.13 18:00
Оценка:
А>Что-то типа:
А>
А>select count(*), count(where state = 0), count(where state = 1)... into l_total, l_zero, l_one,.. from t
А>


иначе говоря хочется вот этого:

select 
(
    select count(*)
    from t
),
(
    select count(*)
    from t
    where state = 0
),
(
    select count(*)
    from t
    where state = 1
),
(
    select count(*)
    from t
    where state = 2
),
(
    select count(*)
    from t
    where state = 3
) into total, one, two, three, four
from dual;

но в одним быстрым запросом.
Re[2]: [Oracle] Посчитать количество определенных значений в таблице
От: Formidable  
Дата: 12.06.13 19:48
Оценка: +1 -1
Здравствуйте, Аноним, Вы писали:

SELECT COUNT(*) all,  COUNT(NVL(state, 0, 1)) state0, COUNT(NVL(state, 1, 1)) state1, COUNT(NVL(state, 2, 1)) state2....
  FROM t
Re: [Oracle] Посчитать количество определенных значений в таблице
От: wildwind Россия  
Дата: 12.06.13 19:50
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Есть таблица с полем state. Нужно посчитать сколько каждого state присутствует. Требуется выбрать количество нужных значений в переменные + выбрать count(*).


1. Получаем нужные данные в строках:
select state, count(*) from t group by rollup (state)


2. Преобразуем строки в столбцы любым из множества известных способов. Наиболее популярные перечислены в FAQ на sql.ru
Лично я бы посоветовал сделать это на клиенте, если конечный результат предназначен для показа пользователю.
Re: [Oracle] Посчитать количество определенных значений в таблице
От: AndrewN Россия  
Дата: 13.06.13 06:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет.


А>Есть таблица с полем state. Нужно посчитать сколько каждого state присутствует. Требуется выбрать количество нужных значений в переменные + выбрать count(*).


А>Что-то типа:

А>
А>select count(*), count(where state = 0), count(where state = 1)... into l_total, l_zero, l_one,.. from t
А>




select count(*), sum(decode(state,0,1,0)), sum(decode(state,1,1,0)), sum(decode(state,2,1,0))... into l_total, l_zero, l_one, l_two,.. from t
--------------------------------------------------------------
Правильно заданный вопрос содержит в себе половину ответа
Re[2]: [Oracle] Посчитать количество определенных значений в таблице
От: Аноним  
Дата: 13.06.13 08:36
Оценка:
Здравствуйте, AndrewN, Вы писали:

AN>
AN>select count(*), sum(decode(state,0,1,0)), sum(decode(state,1,1,0)), sum(decode(state,2,1,0))... into l_total, l_zero, l_one, l_two,.. from t
AN>


спасибо!
Re[2]: [Oracle] Посчитать количество определенных значений в таблице
От: Аноним  
Дата: 13.06.13 08:43
Оценка:
Здравствуйте, wildwind, Вы писали:

W>1. Получаем нужные данные в строках:

W>
W>select state, count(*) from t group by rollup (state)
W>


W>2. Преобразуем строки в столбцы любым из множества известных способов. Наиболее популярные перечислены в FAQ на sql.ru

W>Лично я бы посоветовал сделать это на клиенте, если конечный результат предназначен для показа пользователю.

такой вариант не выдаст state значений которых нет в данной конкретной выборке. т.е. нельзя узнатьполучить 0 для значения state=3 если в выборке нет строк с таким значением state.
Re[3]: [Oracle] Посчитать количество определенных значений в таблице
От: wildwind Россия  
Дата: 13.06.13 14:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>такой вариант не выдаст state значений которых нет в данной конкретной выборке. т.е. нельзя узнатьполучить 0 для значения state=3 если в выборке нет строк с таким значением state.


Этого не было в начальной постановке. Но получить это очень просто. Нужно перед транспонированием соединить результат приведенной выше выборки со справочником этих самых state. Надеюсь, он у вас есть?
Re[4]: [Oracle] Посчитать количество определенных значений в таблице
От: Аноним  
Дата: 16.06.13 04:40
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Но получить это очень просто. Нужно перед транспонированием соединить результат приведенной выше выборки со справочником этих самых state. Надеюсь, он у вас есть?


это как? можно законченный пример? если соединить с таблицей состояний (outer), то по существующим строкам будет точное колчество, тогда как по отсутствующим будет всегда — 1.
Re[5]: [Oracle] Посчитать количество определенных значений в таблице
От: wildwind Россия  
Дата: 16.06.13 12:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, wildwind, Вы писали:


W>>Но получить это очень просто. Нужно перед транспонированием соединить результат приведенной выше выборки со справочником этих самых state. Надеюсь, он у вас есть?


А>это как? можно законченный пример? если соединить с таблицей состояний (outer), то по существующим строкам будет точное колчество, тогда как по отсутствующим будет всегда — 1.


С чего бы 1? 0 будет.
Re[6]: [Oracle] Посчитать количество определенных значений в таблице
От: wildwind Россия  
Дата: 16.06.13 12:31
Оценка:
Здравствуйте, wildwind, Вы писали:

А>>это как? можно законченный пример? если соединить с таблицей состояний (outer), то по существующим строкам будет точное колчество, тогда как по отсутствующим будет всегда — 1.


W>С чего бы 1? 0 будет.


Разумеется, считать нужно не общее количество строк, а количество имеющихся в основной таблице значений.
Пример: http://www.sqlfiddle.com/#!4/28c4bf/2/0
Re[7]: [Oracle] Посчитать количество определенных значений в таблице
От: Аноним  
Дата: 17.06.13 12:02
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Разумеется, считать нужно не общее количество строк, а количество имеющихся в основной таблице значений.

W>Пример: http://www.sqlfiddle.com/#!4/28c4bf/2/0

да, точно, ступил. Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.