SQL - 查找表中的5个最高数字

时间:2016-04-13 01:41:38

标签: mysql sql

我有一些表格都包含有关书籍的信息,例如标题,页面,价格,版税等。 我想使用这些表来查找具有最高版税率的5位作者。

以下是我的表格:

CREATE TABLE authors
  (
  au_id    CHAR(3)     NOT NULL,
  au_fname VARCHAR(15) NOT NULL,
  au_lname VARCHAR(15) NOT NULL,
  phone    VARCHAR(12)         ,
  address  VARCHAR(20)         ,
  city     VARCHAR(15)         ,
  state    CHAR(2)             ,
  zip      CHAR(5)             ,
  CONSTRAINT pk_authors PRIMARY KEY (au_id)
  )ENGINE = InnoDB;


CREATE TABLE royalties
  (
  title_id     CHAR(3)      NOT NULL,
  advance      DECIMAL(9,2)         ,
  royalty_rate DECIMAL(5,2)         ,
  CONSTRAINT pk_royalties PRIMARY KEY (title_id)
  )ENGINE = InnoDB;

到目前为止,我只能选择最高的版税率。我尝试使用TOP(5)功能,但这对我不起作用。我的代码如下。

SELECT au_fname, au_lname
FROM authors
WHERE au_id IN
(SELECT au_id
FROM title_authors
WHERE title_id IN
(SELECT title_id
FROM royalties
WHERE royalty_rate = (SELECT MAX(royalty_rate) FROM royalties)))

如何找到拥有最高版税率的5位作者?

2 个答案:

答案 0 :(得分:2)

MySQL不支持TOP关键字。 MySQL之外的一些数据库(例如SQL Server,Teradata等)确实支持该语法。

MySQL提供与LIMIT关键字类似的功能。

var NS = NS||{};

至于获得结果,我强烈建议您使用连接操作:

 SELECT t.foo
   FROM mytable t
 ORDER BY t.bar DESC
 LIMIT 5

请注意,如果作者有两个(或更多)具有最高royalty_rate的标题,则该作者将被多次返回。

如果您想要五位不同的作者,请查找每位作者的最高版税率,并按此排序。

  SELECT a.au_fname
       , a.au_lname
    FROM authors a
    JOIN title_authors t 
      ON t.au_id = a.au_id
    JOIN royalties r
      ON r.title_id = t.title_id
   ORDER BY r.royalty_rate DESC
   LIMIT 5 

如果超过五位作者拥有相同的最高版税率,则其中五位作者是不确定的。您可以向ORDER BY子句添加其他表达式,以使结果更具确定性。

  SELECT a.au_fname
       , a.au_lname
    FROM authors a
    JOIN title_authors t 
      ON t.au_id = a.au_id
    JOIN royalties r
      ON r.title_id = t.title_id
   GROUP BY a.au_id
   ORDER BY MAX(r.royalty_rate) DESC
   LIMIT 5

答案 1 :(得分:0)

您应该学习使用连接和聚合:

SELECT a.au_fname, a.au_lname
FROM authors a JOIN
     title_authors ta
     USING (au_id) JOIN    
     royalties r
     USING (title_id)
ORDER BY royalty_rate DESC
LIMIT 5;

MySQL使用LIMIT来获取前五行。