powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Группировка с подменой значений
6 сообщений из 6, страница 1 из 1
Группировка с подменой значений
    #40097612
twenty7even
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите реализовать задачу
Имеется таблица
. В поле 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
...
Рейтинг: 0 / 0
Группировка с подменой значений
    #40097619
twenty7even
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно поиграться с CASE, но как задать условие в ELSE - если условие не выполняется верни то что в столбце
...
Рейтинг: 0 / 0
Группировка с подменой значений
    #40097635
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
twenty7even,

coalesce(name, category) ?
...
Рейтинг: 0 / 0
Группировка с подменой значений
    #40097676
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
twenty7even
можно поиграться с CASE, но как задать условие в ELSE - если условие не выполняется верни то что в столбце


В else условие не надо, оно выполняется, если не выполнено ни одно из условий.
...
Рейтинг: 0 / 0
Группировка с подменой значений
    #40097751
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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)
...
Рейтинг: 0 / 0
Группировка с подменой значений
    #40097762
twenty7even
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guzya, Спасибо огромное. Нашел такое решение путем проб и ошибок. Может кому будет полезно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Группировка с подменой значений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]