Два подсчета в представлении MySQL

291
06 марта 2018, 01:56

Мне нужно составить следующее представление «Статистика по жанрам»: жанр – количество фильмов, снятых в России – количество фильмов, снятых в других странах. Имеется таблица фильмов:

Я хочу получить представление с тремя столбцами: жанр, кол-во российских фильмов, кол-во иностранных фильмов. Как составить представление только с количеством российских фильмов по жанрам я понимаю:

create view statistics
as select films.ganre, count(*) Russian_films
from films
where country = 'Russia'
group by ganre;

Получаю такое представление:

Я не понимаю, как добавить второй count(*) для подсчета иностранных фильмов.(Как я понимаю, не требуется подсчитывать отдельно для каждой другой страны, а нужно количество иностранных фильмов по жанрам в совокупности.) Подскажите, пожалуйста, как это сделать. Спасибо.

Answer 1
SELECT ganre, SUM(IF(country = 'Russia', 1, 0)) as `Russian`,
              SUM(IF(country <> 'Russia', 1, 0)) as `nonRussian`  
FROM films
WHERE IFNULL(country, '')<>''
GROUP BY ganre;

WHERE добавлено для игнора фильмов, в которых страна не указана.

Answer 2

Можно было еще так сделать, используя UNION ALL:

create view stat
as select films.ganre
from films
union all
select count(*) Russian_films
from films
where country = 'Russia'
group by ganre
union all
select count(*) Foreign_films
from films
where country != 'Russia'
group by ganre;
READ ALSO
Проблемы с ограничением IP

Проблемы с ограничением IP

Требуется сделать whitelist IP, которые смогут подключаться к mysql (взаимодействовать с портом 3306 (серисом mysql))

310
node-mysql вывод в return

node-mysql вывод в return

Привет! У меня есть некая функция

286
Task.GetAwaiter().GetResult() или Task.Result

Task.GetAwaiter().GetResult() или Task.Result

Вопрос такой: Почему надо использовать один способ и почему нельзя использовать другой?

238