2014-02-13 20 views
0

從下面的數據庫中,我已經掙扎了幾天,以獲得最捐贈給兒童的玩具。我對mysql的使用經驗有限,迄今爲止我通過這個論壇和網絡進行的搜索並沒有讓我明白我做錯了什麼。與插入的數據Here's數據庫:諮詢mysql選擇獲取最捐贈給兒童的玩具

DROP DATABASE IF EXISTS gifts; 

CREATE DATABASE gifts ; 
USE gifts ; 

CREATE TABLE children 
(
     id_children INT NOT NULL PRIMARY KEY AUTO_INCREMENT , 
     name_child VARCHAR(50) NOT NULL, 
     age INT NOT NULL 
) ; 


CREATE TABLE toys 
(
    id_toy INT NOT NULL PRIMARY KEY AUTO_INCREMENT , 
    name_toy VARCHAR(50) NOT NULL, 
    age_adequate INT NOT NULL 
) ; 


CREATE TABLE gifts 
(
    id_children INT NOT NULL , 
    id_gift INT NOT NULL , 

    PRIMARY KEY(id_children, id_gift), 
    FOREIGN KEY (id_children) REFERENCES children(id_children), 
    FOREIGN KEY (id_gift) REFERENCES toys(id_toy) 
) ; 




INSERT INTO children 
VALUES 
    (1,'Juan Perez',5), 
    (2,'Jordi Lopez',8), 
    (3,'Marta Santiago',12), 
    (4,'Laura Martinez',5), 
    (5,'Gerard Laudo', 2) ; 





INSERT INTO toys 
VALUES 
     (1,'Scalextric',12), 
     (2,'Barbie',3), 
     (3,'Bicicleta',5), 
     (4,'Monopoly',12), 
     (5,'Casa Feber',1), 
     (6,'Palacio princesas',5), 
     (7,'Nintendo DS',12), 
     (8,'Puzzle',5), 
     (9,'Sonajero',1); 




INSERT INTO gifts 
VALUES 

    (1,3), 
    (2,3), 
    (2,8), 
    (3,3), 
    (3,7), 
    (3,4), 
    (4,2), 
    (4,8), 
    (5,9) 

是諮詢,我實現。

select name_toy,max(times_given_as_gift) as max_gift 
from toys t, 

(select id_gift,count(*) as times_given_as_gift from gifts g 

group by id_gift) as aux 

where aux.id_gift = t.id_toy 

group by times_given_as_gift 

然後我得到這個在我的查詢結果:

name_toy  max_gift 

    Barbie   1 
    Puzzle   2 
    Bicicleta  3 

在這種情況下,Bicicleta確實是已經捐贈作爲禮物的次數最多的玩具,因爲我已經檢查了它從表數據,但我只希望它在我的查詢結果中顯示爲單行。我怎麼能做到這一點?

任何建議/注意/指導將有所幫助。 先驗謝謝。

回答

2

你非常接近。只需添加一個order bylimit條款:

select name_toy, ;max(times_given_as_gift) as max_gift 
from toys t join 
     (select id_gift, count(*) as times_given_as_gift 
     from gifts g 
     group by id_gift 
    ) aux 
    on aux.id_gift = t.id_toy 
group by times_given_as_gift 
order by max_gift desc 
limit 1; 

我也是「固定」使用正確的ANSI標準join語法查詢。