Как вывести два количества записей по условию одним SELECT?

Вот условие:

Составить запрос с использованием таблицы8, который выводит одним предложением select два числа.
Первое число – количество жителей с фамилией Волков или Волкова.
Второе число – количество жителей с фамилией Зайцев или Зайцева.

Единственное, что в нём откровенно напрягает, так это то, что нельзя использовать больше одного select и, следовательно, подзапросы.

Я, конечно, пытался разрешить это посредством алиасов, но это не помогло:

SELECT FIO VOLKOVI, FIO ZAICEVI FROM ELEKTROSTAL WHERE VOLKOVI LIKE 'Волков%'

П.С. Я знаю, как вывести количество, и знаю, что забыл про условие для второго столбца: всё это я напишу сам, но только после того, как разберусь с селектами и псевдонимами.


Ответы (2 шт):

Автор решения: Aziz Umarov

Ну это просто. Расписывать не стану. Покажу, как считать количество.

SELECT 
     sum(case when family = 'волковы' then 1 else 0 end ) countWolfs, 
     sum(case when family = 'зайцевы' then 1 else 0 end ) countRabbits 
FROM table8

Можно и через count, но идея останется прежней. Считаем только тех, кто нужен.

→ Ссылка
Автор решения: 0xdb

Правильное решение такое:

select 
    count (case when lastname in ('Волков','Волкова') then 1 end) "Волковы", 
    count (case when lastname in ('Зайцев','Зайцева') then 1 end) "Зайцевы" 
from t8
where lastname in ('Волков','Волкова','Зайцев','Зайцева')

Тестовые данные и результат запроса выше:

create table t8 (lastname) as
    select trim (column_value) from xmlTable ('
        "Волков", "Волкова", "Зайцев","Зайцева",
        "Сидоров","Сидорова","Петров","Петрова"');

   Волковы    Зайцевы
---------- ----------
         2          2
→ Ссылка