Как сделать группировку в postgresql с несколькими объединениями? - PullRequest
0 голосов
/ 12 декабря 2018

Мне нужно сгруппировать по dest_spot_id, но я не смог получить желаемый результат.

SELECT
    ddsd.dest_spot_id
  , ddsd.status
  , ddsd.data_type
  , ddsd.destination_id
  , ddsd.created_on
  , ddsd.data_id
  , gi.tp_destination_name  AS dest_or_spot_name
  , mt.taluk_name
  , md.district_name
  , tgi.tp_destination_name AS destination_name
FROM      dm_dest_spot_data ddsd 
LEFT JOIN m_district        md   ON md.id_district = ddsd.district_id
LEFT JOIN m_taluk           mt   ON mt.id_taluk = ddsd.taluk
JOIN      tp_general_info   gi   ON gi.id_tp_general_info = ddsd.dest_spot_id
LEFT JOIN tp_general_info   tgi  ON tgi.id_tp_general_info = ddsd.destination_id
GROUP BY
    1
  , 2
  , 3
  , 4
  , 5
  , 6
  , 7
  , 8
  , 9
  , 10
ORDER BY
  ddsd.data_id

dest_spot_id имеют common_ids, но я хочу получить один из них.допустим, это моя таблица

dest_spot_id |статус |так что

302      | 1      | 5
303      | 2      | 3
302      | 1      | 2
303      | 2      | 1
401      | 1      | 3
308      | 2      | 2

я хочу выводить как:

dest_spot_id |статус |и так далее

302      | 1      | 5
303      | 2      | 3
401      | 1      | 3
308      | 2      | 2

, пожалуйста, дайте мой совет, как этого добиться.я новичок в postgresql

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

вот мой обновленный код после объяснения Дженса.пусть это кому-нибудь поможет ..

SELECT 
    ddsd.dest_spot_id
    ,max(ddsd.status) as dest_spot_status
    ,max(gi.tp_destination_name)as dest_or_spot_name
    ,max(ddsd.created_on) as createdon
    ,max(mt.taluk_name) as taluk_name
    ,max(md.district_name) as district_name
    ,max(ddsd.data_type) as dataType
    ,max(ddsd.destination_id) as destination_idd
    ,max(tgi.tp_destination_name) as destination_name
    ,max(ddsd.data_id) as dataid
FROM dm_dest_spot_data ddsd
LEFT JOIN m_district md ON md.id_district = ddsd.district_id
LEFT JOIN m_taluk mt ON mt.id_taluk = ddsd.taluk
JOIN tp_general_info gi ON gi.id_tp_general_info = ddsd.dest_spot_id
LEFT JOIN tp_general_info as tgi ON tgi.id_tp_general_info = ddsd.destination_id
GROUP BY ddsd.dest_spot_id
ORDER BY max(ddsd.data_id) DESC
0 голосов
/ 12 декабря 2018

Вы не указали, что хотите делать с другими столбцами, но допустим, что вы хотите получить максимальное значение для всего, кроме dest_spot_id:

SELECT
    dest_spot_id
  , MAX(other_colum1)
  , MAX(other_colum2)
  , …
FROM my_table
GROUP BY
  dest_spot_id

Таким образом, вы группируете только по столбцам), который должен быть уникальным в выходных данных.

Для других столбцов вы можете применить некоторую функцию агрегирования, такую ​​как MIN, MAX, SUM, AVG и т. д.

Не имеет значения, есть ли несколькотаблица с JOINS или только одна таблица.

Одна вещь, которая отличается от нескольких таблиц, заключается в том, что вы должны квалифицировать столбец в предложении GROUP BY или использовать положение полей.

SELECT
    t1.dest_spot_id
  , MAX(t2.other_colum)
  , MAX(t3.other_colum)
  , …
FROM my_table1 t1
JOIN my_table2 t2 ON …
JOIN my_table3 t3 ON …
GROUP BY
  t1.dest_spot_id

или

SELECT
    t1.dest_spot_id
  , MAX(t2.other_colum)
  , MAX(t3.other_colum)
  , …
FROM my_table1 t1
JOIN my_table2 t2 ON …
JOIN my_table3 t3 ON …
GROUP BY
  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...