powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Аналог oracle group_id() (9.6.2)
3 сообщений из 3, страница 1 из 1
Аналог oracle group_id() (9.6.2)
    #39410996
RENO4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброе время суток.

Кто что знает про решение сабжевого вопроса?

Например, таблица
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
postgres=# select * from my_gtest;
 si | gtype |      title      |     dt     
----+-------+-----------------+------------
  1 | A     | Main Type       | 
  2 | A     | Main SubType A1 | 2017-02-27
  3 | A     | Main SubType A2 | 2017-02-27
  4 | A     | Main SubType A3 | 2017-02-27
  5 | A     | Main SubType A4 | 2017-02-27
  6 | B     | Main SubType B1 | 2017-02-27
  7 | B     | Main SubType B2 | 2017-02-27
  8 | M     | Master Type M1  | 2017-02-27
  9 | M     | Master Type M2  | 2017-02-27
 10 | S     | Slave Type S1   | 2017-02-27
 11 | S     | Slave Type S2   | 2017-02-27
(11 rows)



Запрос типа
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
postgres=# select dt, gtype, count (1) as qnt from my_gtest group by grouping sets (gtype, dt, ());
     dt     | gtype | qnt 
------------+-------+-----
            | A     |   5
            | B     |   2
            | M     |   2
            | S     |   2
            |       |  11
 2017-02-27 |       |  10
            |       |   1
(7 rows)



Хотелось бы, например, в 3 строке снизу (там, где qnt=11), чтобы было в поле dt что-то типа 'TOTAL'.

В Oracle это делается с помощью функции group_id(), которая отличает NULL разного типа/уровня группировки.
...
Рейтинг: 0 / 0
Аналог oracle group_id() (9.6.2)
    #39411121
ln123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RENO4,

Наверное как-то так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select case when grouping(dt, gtype) = 3 then 'Total' end ,  dt, gtype, count(1) as qnt from ( select * from (values (  1 , 'A'     , 'Main Type' , null),
  (2 , 'A'     , 'Main SubType A1' , 2017-02-27),
  (3 , 'A'     , 'Main SubType A2' , 2017-02-27),
  (4 , 'A'     , 'Main SubType A3' , 2017-02-27),
  (5 , 'A'     , 'Main SubType A4' , 2017-02-27),
  (6 , 'B'     , 'Main SubType B1' , 2017-02-27),
  (7 , 'B'     , 'Main SubType B2' , 2017-02-27),
  (8 , 'M'     , 'Master Type M1'  , 2017-02-27),
  (9 , 'M'     , 'Master Type M2'  , 2017-02-27),
 (10 , 'S'     , 'Slave Type S1'   , 2017-02-27),
 (11 , 'S'     , 'Slave Type S2'   , 2017-02-27)) as my_gtest (si , gtype ,      title      ,     dt     )) t group by grouping sets (gtype, dt, ());


 case  |  dt  | gtype | qnt 
-------+------+-------+-----
       |      | A     |   5
       |      | B     |   2
       |      | M     |   2
       |      | S     |   2
 Total |      |       |  11
       | 1988 |       |  10
       |      |       |   1
(7 rows)
...
Рейтинг: 0 / 0
Аналог oracle group_id() (9.6.2)
    #39411140
RENO4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ln123,

Спасибо, подходит. А то как-то по группировке в PG сумбурно все в доках.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Аналог oracle group_id() (9.6.2)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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