首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -找出表中最高的5个数字

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

Stack Overflow用户
提问于 2016-04-13 09:41:38
回答 2查看 116关注 0票数 0

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

下面是我的表格:

代码语言:javascript
复制
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)函数,但对我不起作用。我的代码如下。

代码语言:javascript
复制
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位作者?

EN

回答 2

Stack Overflow用户

发布于 2016-04-13 09:44:02

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

MySQL通过LIMIT关键字提供了类似的功能。

代码语言:javascript
复制
 SELECT t.foo
   FROM mytable t
 ORDER BY t.bar DESC
 LIMIT 5

就获得结果而言,我强烈建议您使用join操作:

代码语言:javascript
复制
  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 

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

如果你想要五个不同的作者,找到每个作者的最大版税,并按此排序。

代码语言:javascript
复制
  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

如果五个以上的作者具有相同的最高royalty_rate,那么这些作者中的哪五个是不确定的。您可以向ORDER BY子句添加其他表达式,以使结果更具确定性。

代码语言:javascript
复制
   ORDER BY MAX(r.royalty_rate) DESC, a.id DESC
票数 2
EN

Stack Overflow用户

发布于 2016-04-13 09:46:41

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

代码语言:javascript
复制
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来获取前五行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36587059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档