Это трудно объяснить в заголовке, но у меня есть столбец, который является таблицей соединений, и я хотел бы подсчитать количество книг, в которых появился персонаж, на основе 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
.
Как бы я это сделал?