如果我在MySQL中定义了以下表:
create table car (
brand int
car-color int
car-price int
car-number int auto_increment;
primary key (bradn, car-color);
UNIQUE(car-number) ;
);
create table concurrent (
person-id int;
car-number int;
primary key (person-id, car-number);
foreign key (person-id) references person(id);
foreign key (car-number) references car(car-number);
);
create table value-placed (
person-id int;
car-number int;
value int;
primary key (person-id, car-number, value);
foreign key (person-id, car-number) references concurrent (person-id, car-number);
);
我知道代码编写得不好,只是为了得到一个想法。
基本上,我们的汽车有一个基本价格(汽车价格),人们可以签署自己作为购买汽车的汽车,人们可以为他们所在的汽车登记竞争价值。最后X天,汽车价值最高的人赢得了汽车。
现在,我想要的查询是:
我可以更好地解释一下:我想为每辆车提供一个人放在其中的最高价格。所以说,如果A人在汽车1上放置500,而B在汽车2上放置100,我想取值500并将其除以汽车1基本价格。
我需要为每辆车做这件事并返回最高比率。
我该怎么做?
答案 0 :(得分:0)
您需要使用子查询来计算每辆车的最大值,然后将子查询结果加入到载有每辆车的汽车价格的表格中(即car
)。然后,连接结果的每一行都有价格和最大值,您可以从中计算(并按顺序)该比率。如果您只想要最高比率,那么在MySQL(以及许多其他DBMS)中,您可以将返回的结果限制为该行。
总的来说,你可能会有这样的事情:
SELECT
car.car_number, (max_value.value / car.car_price) AS ratio
FROM
car
JOIN (
SELECT
car_number,
MAX(value) AS value
FROM
value_placed
GROUP BY
car_number
) max_value
ON car.car_number = max_value.car_number
ORDER BY ratio DESC
LIMIT 1
答案 1 :(得分:0)
您可以使用以下内容:
select c.carnumber, max(vp.value/c.carprice) ratio
from car c
join valueplaced vp on vp.carnumber = c.carnumber
group by c.carnumber
order by ratio desc;