Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Группировка с подменой значений  [new]
twenty7even
Member

Откуда:
Сообщений: 21
Помогите реализовать задачу
Имеется таблица Картинка с другого сайта. . В поле category в некоторых строках имеются коды формата IAB...

Мне необходимо выполнить подсчет строк с группировкой по полю category, но только , чтобы на выходе вместо кодов IAB... приходило соответствующее ему значение с поля name.

Картинка с другого сайта.


П.С. все эти коды хранятся в бд в отдельном справочнике. Первый скрин это результат джоина





[1]: https://i.stack.imgur.com/zbM27.png
[2]: https://i.stack.imgur.com/zHzmL.png
[3]: https://i.stack.imgur.com/Ld8SH.png
14 сен 21, 16:56    [22371812]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с подменой значений  [new]
twenty7even
Member

Откуда:
Сообщений: 21
можно поиграться с CASE, но как задать условие в ELSE - если условие не выполняется верни то что в столбце
14 сен 21, 17:15    [22371824]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с подменой значений  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1527
twenty7even,

coalesce(name, category) ?
14 сен 21, 18:02    [22371850]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с подменой значений  [new]
Guzya
Member

Откуда:
Сообщений: 788
twenty7even
можно поиграться с CASE, но как задать условие в ELSE - если условие не выполняется верни то что в столбце


В else условие не надо, оно выполняется, если не выполнено ни одно из условий.
14 сен 21, 22:01    [22371923]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с подменой значений  [new]
Guzya
Member

Откуда:
Сообщений: 788
create table t1 (category text);

create table t_dict (category text, name text);

insert into t_dict values('cat1','Категория 1'),('cat2','Категория 2'),('cat3','Категория 3'),('cat4','Категория 4');

insert into t1 (select CASE (random()*10)::int WHEN 1 THEN 'cat1' WHEN 2 THEN 'cat2' WHEN 3 THEN 'cat3' WHEN 4 THEN 'cat4' WHEN 5 THEN 'cat5' ELSE 'cat6' END from generate_series(1,100));

select coalesce(name,t1.category) as category,count(*) from t1 left join t_dict on t_dict.category=t1.category group by 1 order by 1;

  category   | count 
-------------+-------
 cat5        |    14
 cat6        |    41
 Категория 1 |    14
 Категория 2 |    14
 Категория 3 |     9
 Категория 4 |     8
(6 rows)
15 сен 21, 11:21    [22372041]     Ответить | Цитировать Сообщить модератору
 Re: Группировка с подменой значений  [new]
twenty7even
Member

Откуда:
Сообщений: 21
Guzya, Спасибо огромное. Нашел такое решение путем проб и ошибок. Может кому будет полезно

with creative as (select type,case when category like 'IAB%'THEN split_part(category,' ',1)
else creative.category
end
from register.creative)
select uuid_generate_v4() AS id,count(type),coalesce(name,category) as spravochnik,
register.last(create_date)::date AS created_date
from creative left join dictionary.dic_glossary_element d on creative.category=d.ext_code
group by spravochnik
15 сен 21, 12:10    [22372058]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить