Двойной счет столбца на основе другого столбца для таблицы соединения - PullRequest
0 голосов
/ 29 октября 2018

Это трудно объяснить в заголовке, но у меня есть столбец, который является таблицей соединений, и я хотел бы подсчитать количество книг, в которых появился персонаж, на основе type книги.

Так что, если cb.type = 2, тогда я хочу count(cb.id) + 1, если это имеет смысл. В противном случае для всех других типов просто посчитайте это как обычно count(cb.id).

  SELECT
   CASE
     WHEN cb.type = 2 THEN count(cb.id) + 1
     ELSE count(cb.id)
   END AS book_count,
   c.*
  FROM characters c
         INNER JOIN character_books cb ON cb.character_id = c.id
  GROUP BY c.id, cb.type
  ORDER BY book_count DESC

Приведенный выше запрос не работает, потому что мне нужно сгруппировать по c.id, cb.type, и поэтому я не получаю общее количество книг, в которых появился персонаж.

Теперь без учета cb.type запрос будет выглядеть так:

  SELECT count(cb.id) AS book_count, c.*
  FROM characters c
         INNER JOIN character_books cb ON cb.character_id = c.id
  GROUP BY c.id
  ORDER BY book_count DESC

Однако, если столбец cb.type = 2 (который на самом деле является побитовым столбцом, просто для простоты здесь используется число 2), то мы должны добавить дополнительный счет к book_count.

Как бы я это сделал?

1 Ответ

0 голосов
/ 29 октября 2018

Вы хотите условную агрегацию. Я думаю, что вы хотите:

SELECT c.id, 
       SUM(CASE cb.type = 2 THEN 2 ELSE 1 END) as book_count
FROM characters c INNER JOIN
     character_books cb
     ON cb.character_id = c.id
GROUP BY c.id
ORDER BY book_count DESC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...