【问题标题】:ORACLE SQL select max(count()) to yearORACLE SQL 选择 max(count()) 到年份
【发布时间】:2016-09-27 09:00:46
【问题描述】:

我有图书馆数据库,我正在尝试将大多数借用的标题分配给每年,例如

2015 - The Great Gatsby
2014 - Da vinci code
2013 - Harry Potter
....

我试过了,但我不确定

select to_char(borrow_date,'YYYY'),title_name
from k_title
join k_book
using(title_id)
join k_rent_books
using(book_id)
group by to_char(borrow_date,'YYYY'),title_name
having count(title_id) = (
select max(cnt) FROM(select count(title_name) as cnt
from k_title
join k_book
using(title_id)
join k_rent_books
using(book_id)
group by title_id,title_name,to_char(borrow_date,'YYYY')));

我只有 3 个结果

2016 - Shogun
2006 - The Revolt of Mamie Stover
1996 - The Great Gatsby

我会很高兴得到任何帮助:)

【问题讨论】:

    标签: sql oracle select max


    【解决方案1】:

    Oracle 有很好的能力来获取聚合中的第一个或最后一个值(与min()max() 不同)。这需要使用名为 keep 的东西。

    所以,表达你想做的事情的方式是:

    select yyyy,
           max(title_name) keep (dense_rank first order by cnt desc) as title_name
    from (select to_char(borrow_date, 'YYYY') as yyyy,
                 title_name, count(*) as cnt
          from k_title t join
               k_book b
               using (title_id) join
               k_rent_books
               using (book_id)
          group by to_char(borrow_date, 'YYYY'), title_name
        ) yt
    group by yyyy;
    

    您的查询返回的年份/标题组合具有所有年份的总最大计数,而不是每年的最大值。

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多