Mysql SQL-查找表中最高的5个数字
我有一些表格都包含有关书籍的信息,如标题、页数、价格、版税等。 我想用这些表格找出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) ,
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。