获得行数最多的年份

时间:2015-09-27 15:25:28

标签: sql postgresql

注意,我刚开始学习PostgreSQL大学,英语不是我的母语。

我需要找到发行图书最受欢迎的年份(拍摄大部分版本时发行的图书年份)。

在这里,我发布了三年的书籍和所拍摄的副本数量:

Select distinct book.year, count(copy.nr)
From stud.book, stud.copy
Where copy.taken is not null and book.isbn=copy.isbn
Group by book.year;

这就是我得到的:

 year | count
------+-------
 2007 |     2
 2006 |     9
 2005 |     5
 (3 rows)

这就是我真正需要的:

 year | count
------+-------
 2006 |     9

因为2006年发行的书籍最受欢迎(2006年发行了9本书)。

2 个答案:

答案 0 :(得分:2)

使用order bylimit 1

Select book.year, count(copy.nr) as cnt
From stud.book, stud.copy
Where copy.taken is not null and book.isbn=copy.isbn
Group by book.year
Order by cnt desc
Limit 1;

注意:除非您确实知道自己在做什么,否则不要将distinctgroup by一起使用。此外,表别名和显式join语法使这样的查询更容易编写和阅读:

Select b.year, count(c.nr) as cnt
From stud.book b join
     stud.copy c
     on b.isbn = c.isbn
Where c.taken is not null
Group by b.year
Order by cnt desc
Limit 1;

一个简单的规则:从不from子句中使用逗号; 始终使用显式join语法。

答案 1 :(得分:0)

您应该使用适当的连接语法,而不是在join子句中声明where条件。

执行此操作的一种方法是使用cte

with counts as (
select book.year, count(copy.nr) as cnt
from stud.book join stud.copy
on book.isbn=copy.isbn
where copy.taken is not null
group by book.year ) 
select * from counts
where cnt = (select max(cnt) as maxcnt from counts)