Как сгруппировать Left Outer Join - PullRequest
0 голосов
/ 03 июля 2019

У меня есть две модели, User и Telephone. У пользователя много телефонов.

Я делаю список активных администраторов, и если у пользователя есть два телефона, я бы хотел сгруппировать их вместе. Мне нужен сырой SQL-запрос, и тот, который я написал, дает две отдельные строки.

Что я хочу:

John Legend 123456, 654321

Что я получаю:

John Legend 123456
John Legend 654321

Это мой запрос:

      a = "SELECT user.id, user.first_name, user.last_name, telephone.id AS telephone_id, telephone.number AS telephone_number,
      FROM users 
      LEFT OUTER JOIN telephones ON telephones.user_id = user.id
      GROUP BY users.id, telephones.user_id, telephones.number, telephones.id
      ORDER BY user.id DESC"

1 Ответ

2 голосов
/ 03 июля 2019

Если вы используете Postgres 9.0+, тогда вы можете использовать функцию STRING_AGG здесь:

SELECT
    u.id,
    u.first_name,
    u.last_name,
    STRING_AGG(t.number, ',') AS telephone_number
FROM users u
LEFT JOIN telephones t
    ON t.user_id = u.id
GROUP BY
    u.id
ORDER BY
    u.id DESC;

Я включил только три столбца, которые на самом деле показывает ваш ожидаемый, хотя вы можете добавить другие столбцы, еслиты хочешь.

...