Как не включать в группировку case when?

Есть небольшой sql запрос, который должен выдавать значение по полям, но запрашивает группировку, если включаю в группировку то я получаю не те данные, которые хотел бы видеть , запрос выглядит вот так:

CREATE TABLE client_calls (client_number VARCHAR(255), dt DATE, title VARCHAR(255),count VARCHAR(255));
INSERT INTO client_calls (client_number, dt , title,count )
VALUES
('89874234523', '2021-10-10', 'Как оцениваете сервис?', '4'),
('89874234523', '2021-10-10', 'Как оцениваете работу мастера?', '5'),
('89874234524', '2021-10-11', 'Как оцениваете сервис?', '3'),
('89874234524', '2021-10-11', 'Как оцениваете работу мастера?', '2'),
('89874234525', '2021-10-12', 'Как оцениваете сервис?', '5'),
('89874234525', '2021-10-12', 'Как оцениваете работу мастера?', '3'),

select
      (case when title = 'Как оцениваете сервис?' then count
      else
      0
      end) as hello,
      (case when title = 'Как оцениваете работу мастера?' then count
      else
      0
      end) as znach,
      sum(case when title = 'Как оцениваете работу мастера?' then count
      when title = 'Как оцениваете сервис?' then count
      else
      0
      end) as all,
      client_number as client,
      dt as date1
from client_calls
group by client_number, d

То есть код запрашивает добавить в группировку title и count , подскажите пожалуйста, как можно обойти group by или же сделать что-то иначе? Cейчас пишет ошибку "column "title" must appear in the GROUP BY clause or be used in an aggregate" . Если добавить title и count в group by будет выдавать примерно такой результат: Результат с group by Нужно сделать такой: Нужный результат


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

Автор решения: Akina
SELECT client_number,
       dt,
       SUM(CASE WHEN title = 'Как оцениваете сервис?'
                THEN "count" :: INT
                ELSE 0
                END) AS hello,
       SUM(CASE WHEN title = 'Как оцениваете работу мастера?'
                THEN "count" :: INT
                ELSE 0
                END) AS znach,
       SUM(CASE WHEN title IN ('Как оцениваете сервис?',
                               'Как оцениваете работу мастера?')
                THEN "count" :: INT
                ELSE 0
                END) AS "all"
FROM client_calls
GROUP BY 1, 2;

https://dbfiddle.uk/?rdbms=postgres_14&fiddle=e9a608f36b87f39699242cbb31dc1544

Кстати, хранить число в текстовом поле (я про count VARCHAR(255)) как бы неправильно... И использовать служебные слова как имена полей - тоже.

→ Ссылка