Как использовать group by в этом сценарии с выражением регистра? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть фильмы и жанры фильмов.Я показываю жанр фильма и справа количество фильмов, которые существуют в этом жанре фильма.Это работает с помощью группирования по жанру фильма и подсчета идентификаторов фильма.

Однако я не понимаю, как использовать группу с оператором case, чтобы, например, показывать счетчик каждого жанра фильма для жанров фильма «Комедия» и «Действие», например, но вместо показаподсчет каждого фильма для других жанров показывают «Остаться», а затем подсчет оставшихся фильмов, которые не относятся к комедии или боевику, например:

Action  10
Comedy  7
Remaining  15

Знаете ли вы, что необходимо для достижения этой цели??Потому что необходимо всегда группировать по жанру фильма, даже если жанр фильма отличается от «Комедии» или «Действие», необходимо группировать по жанру фильма, но в этом случае необходимо показывать количество этих фильмов, которые нежанров "боевик" и "комедия".

Ответы [ 4 ]

0 голосов
/ 25 февраля 2019

другой способ с использованием Union,

select genre,count(1) as cnt from tbl_movie where genre in ('Action','Comedy') group by genre
union
select 'others',count(1) as cnt from tbl_movie where genre not in  ('Action','Comedy')
0 голосов
/ 25 февраля 2019

Повторите выражение case:

select (case when genre in ('Action', 'Comedy') then genre
             else 'Remaining'
        end) as new_genre,
       count(*)
from t
group by (case when genre in ('Action', 'Comedy') then genre
               else 'Remaining'
          end);

Некоторые базы данных распознают псевдонимы столбцов в group by, поэтому иногда это можно упростить до:

select (case when genre in ('Action', 'Comedy') then genre
             else 'Remaining'
        end) as new_genre,
       count(*)
from t
group by new_genre;
0 голосов
/ 25 февраля 2019

Используйте производную таблицу для выражения case .Затем GROUP BY его результат:

select genre, count(*)
from
(
    select case when genre in ('Action', 'Comedy') then genre
                else 'Remaining'
           end as genre
    from tablename
) dt
group by genre

ANSI SQL-совместимость!

0 голосов
/ 25 февраля 2019

Вы можете попробовать ниже -

select case when genres in ('Comedy','Action') then genres
else 'Remaining' end as genre,count(*) from tablename
group by case when genres in ('Comedy','Action') then genres
else 'Remaining' end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...