ГРУППА подзапросов По оператору

#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)