#sql #postgresql
#sql #postgresql
Вопрос:
У меня есть таблица карточек и записей, и каждая карточка и запись Post содержат как минимум 2 тега. Текущий запрос использует таблицы card_to_tags_link
и post_to_tags_link
, чтобы получить все записи, сгруппированные по определенной карточке.
SELECT
card,
count(post.id) AS count_1,
max(post.date) AS max_1
FROM
card
JOIN card_to_tags_link ON card.id = card_to_tags_link.card_id
JOIN post_to_tags_link ON post_to_tags_link.post_tags @>card_to_tags_link.card_tags
JOIN post ON post_to_tags_link.post_id = post.id
GROUP BY
card.id
Теперь, поскольку у каждой записи есть post_owner
столбец, я хочу объединить все записи по author_url
и упорядочить по количеству записей:
SELECT ARRAY(post.author_url
from post
group_by post.author_url
order by count(post.id)
limit by 10)
Это простой запрос, когда он выполняется сам по себе, но я хочу добавить его в качестве подзапроса к существующему:
SELECT
card,
count(post.id) AS count_1,
max(post.date) AS max_1,
**ADD SUBQUERY HERE**
FROM
card
JOIN card_to_tags_link ON card.id = card_to_tags_link.card_id
JOIN post_to_tags_link ON post_to_tags_link.post_tags @>card_to_tags_link.card_tags
JOIN post ON post_to_tags_link.post_id = post.id
GROUP BY
card.id
Возможно ли использовать запрос автора в качестве подзапроса и возвращать результат в виде массива?
Комментарии:
1. Примеры данных и желаемые результаты действительно помогли бы.
Ответ №1:
Вы просто хотите ARRAY_AGG()
?
SELECT card,
count(post.id) AS count_1,
max(post.date) AS max_1,
ARRAY_AGG(DISTINCT post.author_url)