[英]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.