Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-查找表中最高的5个数字_Mysql_Sql - Fatal编程技术网

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

Mysql SQL-查找表中最高的5个数字,mysql,sql,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) ,

我有一些表格都包含有关书籍的信息,如标题、页数、价格、版税等。 我想用这些表格找出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位版税最高的作者呢?

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

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

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

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

  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 
请注意,如果一个作者有两个(或更多)具有最高版税率的作品,该作者将被多次返回

如果您需要五位不同的作者,请找到每位作者的最高版税,然后按此顺序排序

  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
如果有五位以上的作者拥有相同的最高版税率,那么其中哪五位作者是不确定的。您可以向ORDERBY子句添加其他表达式,以使结果更具确定性

   ORDER BY MAX(r.royalty_rate) DESC, a.id DESC

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

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

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

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

  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 
请注意,如果一个作者有两个(或更多)具有最高版税率的作品,该作者将被多次返回

如果您需要五位不同的作者,请找到每位作者的最高版税,然后按此顺序排序

  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
如果有五位以上的作者拥有相同的最高版税率,那么其中哪五位作者是不确定的。您可以向ORDERBY子句添加其他表达式,以使结果更具确定性

   ORDER BY MAX(r.royalty_rate) DESC, a.id DESC

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

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
获取前五行。

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

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
获取前五行。

我添加了MySQL的标记,因为语法是MySQL。我添加了MySQL的标记,因为语法是MySQL。