COUNT на соединенных строках - PullRequest
0 голосов
/ 26 апреля 2020

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

SELECT *, COUNT(id_feed.id) as price_count, prices.id as id FROM prices
LEFT JOIN id_feed ON id_feed.id_prices = prices.id
WHERE prices.id_user = :id_user

таблица цен:

id name  id_user
1  name1 21
2  name2 21
3  name3 4

таблица id_feed:

id id_prices price
1  1         30
2  1         30
3  1         30
4  2         30
5  2         30
6  3         30

Результат

id id_prices price_count
1  name1     3
2  name2     2

Ответы [ 3 ]

0 голосов
/ 26 апреля 2020

Вам, кажется, нужна оконная функция:

SELECT prices.*, prices.id as id ,
      count(*) over (partition by id_prices) as price_count
FROM prices LEFT JOIN 
     id_feed 
     ON id_feed.id_prices = prices.id
WHERE prices.id_user = :id_user
0 голосов
/ 27 апреля 2020

С объединением и агрегацией:

select p.id, p.name, count(*) price_count
from prices p inner join id_feed i
on i.id_prices = p.id
where p.id_user = :id_user
group by p.id, p.name

См. Демоверсию . Результаты для id_user = 21:

> id | name  | price_count
> -: | :---- | ----------:
>  1 | name1 |           3
>  2 | name2 |           2
0 голосов
/ 26 апреля 2020

Вы описываете оконные функции. Как то так:

SELECT p.*, f.*, COUNT(f.id) OVER () as price_count
FROM prices p LEFT JOIN
     id_feed f
     ON f.id_prices = p.id
WHERE p.id_user = :id_user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...