Задать вопрос
@kosk

Как правильно реализовать в Postgresql IF конструкцию с переменной?

И так, есть таблица вида :
Table1
| id | column1 | column2 | 
| 1 | sss | sss| 
| 2 | sss | sss| 
| 3 | sss | sss| 
| 4 | sss | ses| 
| 5 | ses | ses| 
| 6 | ses | sew| 
| 7 | sew | seq|


Нужно получить:

| id | column1 | column2 | column3 |
| 1 | sss | sss| 1 |
| 2 | sss | sss| 1 |
| 3 | sss | sss| 1 |
| 4 | sss | ses| 2 |
| 5 | ses | ses| 2 |
| 6 | ses | sew| 3 |
| 7 | sew | seq| 4 |


Рассматриваю вариант с увеличением переменной на 1...
select 1::int as I into temp table myvar; # создал переменную; воспользовался temp таблицей
select 
"id", 
"column1",
"column2", 
IF(("column2" <> "column1"), v.I++, v.I) AS "track" #как бы мог выглядеть синтаксис с инкрементацией, 
# переменную v.I  по условию увеличивать, то есть увеличить на 1, если условие верно.
from table1 , myvar v


В select'e примерный IF ( ...) синтаксис.
Подскажите, как правильно реализовать PostgreSQL конструкцию IF ( condition, var++, var ) ?
Какая есть альтернатива?

Спасибо!
  • Вопрос задан
  • 946 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@SharuPoNemnogu
не язык плохой, программисты такие...
select id, 
           column1, 
           column2, 
           count(
                    case when column1 <> column2 
                    then 1 
                    else null end
           ) over(order by id) 
from table1;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zoroda
@zoroda
Необычный Fullstack
Есть специальная оконная функция для такого случая:
select id, 
           column1, 
           column2, 
           dense_rank() over(order by  column1,  column2)
from table1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы