Sql 从给定所有者的所有记录中计算记录的百分比

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

我有车主和汽车表

我想计算一辆车对所有车主拥有的汽车的价格贡献

在同一个查询中,我必须计算每辆车价格总和的价格贡献,所以我喜欢这样做

学生37.汽车.价格::十进制/选择SUMprice::十进制

但在同一个查询中,按in select分组不起作用,因为我没有任何与正确记录的连接:/any tips

整个问题,但我知道它没有意义

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(按车主编号),因为我不知道如何处理它