Подсчет процента записи от всех записей данного владельца - PullRequest
0 голосов
/ 04 марта 2020

У меня есть owners и cars таблица.

Я хочу рассчитать цену одного автомобиля для всех автомобилей, которыми владеет владелец.

В этом же запросе мне нужно вычислить цену вклада. к сумме цены каждого автомобиля, поэтому я делаю это как

student_37.cars.price::decimal/((SELECT SUM(price::decimal)

Но в том же запросе группировка в select не работает, потому что у меня нет связи с правильной записью: / Любые советы?


весь запрос, но я знаю, что это не имеет смысла

SELECT 
    name,
    student_37.cars.id AS car_id,
    CONCAT((ROUND(student_37.cars.price::decimal/((SELECT SUM(price::decimal) 
    FROM student_37.cars))*100)),'%'
    ) AS percentage,

    (student_37.cars.price::decimal/(SELECT SUM(PRICE) FROM student_37.cars GROUP BY owner_id))
FROM student_37.owners
JOIN 
    student_37.cars     
ON 
    student_37.owners.id=student_37.cars.owner_id

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вы должны использовать оконные функции:

SELECT o.name, c.id as car_id,
     ROUND((c.price/ SUM(c.price) OVER (PARTITION BY c.owner_id)) * 100, 2) AS percentage
FROM owner o JOIN
     car c
     ON o.id = c.owner_id;

Они более эффективны, чем комбинация JOIN / GROUP BY.

1 голос
/ 04 марта 2020

Я не совсем понимаю, чего вы пытаетесь достичь, но следующий запрос может помочь вам или может быть решением:

SELECT
  o.name,
  c.id as car_id,
  ROUND((c.price/t.total)*100, 2) AS percentage
FROM 
  owner o
  JOIN car c ON o.id = c.owner_id
  JOIN (
    SELECT c.owner_id, SUM(c.price) AS total 
    FROM car c
    GROUP BY c.owner_id
  ) t ON t.owner_id = o.id

СМОТРИТЕ ДЕМО ЗДЕСЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...