Sql 从给定所有者的所有记录中计算记录的百分比
我有车主和汽车表 我想计算一辆车对所有车主拥有的汽车的价格贡献 在同一个查询中,我必须计算每辆车价格总和的价格贡献,所以我喜欢这样做 学生37.汽车.价格::十进制/选择SUMprice::十进制 但在同一个查询中,按in select分组不起作用,因为我没有任何与正确记录的连接:/any tips 整个问题,但我知道它没有意义Sql 从给定所有者的所有记录中计算记录的百分比,sql,postgresql,Sql,Postgresql,我有车主和汽车表 我想计算一辆车对所有车主拥有的汽车的价格贡献 在同一个查询中,我必须计算每辆车价格总和的价格贡献,所以我喜欢这样做 学生37.汽车.价格::十进制/选择SUMprice::十进制 但在同一个查询中,按in select分组不起作用,因为我没有任何与正确记录的连接:/any tips 整个问题,但我知道它没有意义 SELECT name, student_37.cars.id AS car_id, CONCAT((ROUND(student_37.car
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
我不确定是否完全理解您试图实现的目标,但以下查询可能对您有所帮助,也可能是解决方案:
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
我不确定是否完全理解您试图实现的目标,但以下查询可能对您有所帮助,也可能是解决方案:
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
您应该使用窗口功能:
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;
它们比按组合加入/分组更有效。您应该使用窗口功能:
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;
它们比按组合加入/分组更有效。你能提供你的整个查询吗?我已经添加了它,我说的都是student_37.cars.price::decimal/从student_37.cars按所有者选择SUMPRICE\u id部分,因为我不知道如何处理它。你能提供你的整个查询吗?我已经添加了它,我说的都是student_37.cars.price::decimal/从student_37.cars组中选择SUMPRICE(按车主编号),因为我不知道如何处理它