2014-11-20 155 views
-1

如果非要在MySQL中定義下表: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

查找到GROUPBY – 2014-11-20 18:10:29

+0

什麼完成此任務停止嗎?你卡在哪裏? – 2014-11-20 18:12:59

+4

對於人類的愛,不要在表格/列標識符中加入' - '! – Strawberry 2014-11-20 18:22:43

回答

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 
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