написання sql підзапиту з приведенням типів та склеюванням результатів в строку
здається, sql можна вивчати безконечно - завжди є щось таке, чим ти не користувався, чого ще не знаєш, не вивчив :)
сьогодні розглянемо складніший (не зовсім простий) запит в postgresql -
навчимось писати підзапити postgresql із приведенням типів
+ як значення багатьох рядків в одну строку склеїти
"SELECT id, name, lang "
"(SELECT string_agg( cast(tag_id as varchar), ',') AS tags FROM tags_table WHERE book_id = books_table.id AND status = 1)"
" FROM books_table WHERE user_id = $1 AND (status = 0 OR status = 1) ORDER BY id DESC LIMIT $2 OFFSET $3"
тут ми отримуємо декілька рядів tag_id з таблиці tags_table
(у яких однаковий - певний - book_id та status),
приводимо ці tag_id до строки
cast(tag_id as varchar)
і далі склеюємо в csv ці строки за допомогою
string_agg( cast(tag_id as varchar), ',')
та отримуємо як одне значення tags
загалом сенс цього запиту такий --
отримати певну кількість рядків (LIMIT)
пропустивши певну кількість рядків з початку (OFFSET)
з таблиці books_table, рядки книг,
які належать користувачу з певними user_id та status,
у кожної книг є декілька тегів,
і ми дістаємо всі tag_id для кожної книги, яку ми дістаємо :)
це все :)
Посилання
https://stackoverflow.com/questions/15847173/concatenate-multiple-result-rows-of-one-column-into-one-group-by-another-column
https://stackoverflow.com/questions/13809547/convert-integer-to-string-in-postgresql