SELECT * и SELECT COUNT (*) в одном запросе - PullRequest
0 голосов
/ 24 февраля 2020

Мой SQL запрос выглядит следующим образом

SELECT * 
FROM categories AS c
LEFT JOIN LATERAL (SELECT i.* 
                   FROM influencer_profiles AS i 
                   WHERE c.id = i.category_id
                   ORDER BY i.updated_at
                   LIMIT 2) AS i ON 1 = 1
INNER JOIN users AS u ON i.user_id = u.id

Но я также хочу посчитать каждую influencer_profile для категории, чтобы отобразить, сколько influencer_profile s в каждой категории. Как я могу использовать COUNT(*) с выделением всех столбцов?

SELECT * 
FROM categories AS c
LEFT JOIN LATERAL (SELECT COUNT(*) 
                   FROM influencer_profiles AS i 
                   WHERE c.id = i.category_id
                   ORDER BY i.updated_at
                   LIMIT 2) AS i ON 1 = 1
INNER JOIN users AS u ON i.user_id = u.id

Этот код не работает.

1 Ответ

0 голосов
/ 24 февраля 2020

Возможно, вы просто хотите функцию окна. Я отмечаю, что вы используете left join в одном месте, а inner join отменяет его.

Итак, я думаю:

SELECT c.*, i.*, u.*,
       COUNT(*) OVER (PARTITION BY c.id) as category_cnt
FROM categories c LEFT JOIN LATERAL
     (SELECT i.*
      FROM influencer_profiles AS i 
      WHERE c.id = i.category_id
      ORDER BY i.updated_at
      LIMIT 2
     ) i
     ON 1=1 LEFT JOIN
     users u 
     ON i.user_id = u.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...