簡體   English   中英

SQL-找出表格中的5個最高數字

[英]SQL - finding out the 5 highest numbers in a table

我有一些表都包含有關書籍的信息,例如書名,頁面,價格,版權費等。我想使用這些表來查找版權費率最高的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

如果五個以上的作者具有相同的最高使用費率,那么其中五個作者是不確定的。 您可以在ORDER BY子句中添加其他表達式,以使結果更具確定性。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM