MySQL复杂查询

时间:2014-11-20 18:07:55

标签: mysql sql

如果我在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基本价格。

我需要为每辆车做这件事并返回最高比率。

我该怎么做?

2 个答案:

答案 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;

SQL Fiddle to show results