与MAX聚合函数甲骨文CASE表达式
问题描述:
使用Oracle,我已经选择了的title_id与出版其相关的一个月:与MAX聚合函数甲骨文CASE表达式
SELECT title_id,
CASE EXTRACT(month FROM pubdate)
WHEN 1 THEN 'Jan'
WHEN 2 THEN 'Feb'
WHEN 3 THEN 'Mar'
WHEN 4 THEN 'Apr'
WHEN 5 THEN 'May'
WHEN 6 THEN 'Jun'
WHEN 7 THEN 'Jul'
WHEN 8 THEN 'Aug'
WHEN 9 THEN 'Sep'
WHEN 10 THEN 'Oct'
WHEN 11 THEN 'Nov'
ELSE 'Dec'
END MONTH
FROM TITLES;
使用声明:
SELECT MAX(Most_Titles)
FROM (SELECT count(title_id) Most_Titles, month
FROM (SELECT title_id, extract(month FROM pubdate) AS MONTH FROM titles) GROUP BY month);
我能够确定出版书籍数量最多的月份。
有没有办法加入这两个声明,以便我可以将月份的文本等值与最大的标题数量相关联?
答
为了将一个月转换为字符串,我不会使用CASE
语句,我只是使用TO_CHAR
。并且您可以使用分析函数对结果进行排名,以获得发布最多书籍的月份。
SELECT num_titles,
to_char(publication_month, 'Mon') month_str
FROM (SELECT count(title_id) num_titles,
trunc(pubdate, 'MM') publication_month,
rank() over (order by count(title_id) desc) rnk
FROM titles
GROUP BY trunc(pubdate, 'MM'))
WHERE rnk = 1
了一些额外的注意事项
- 如果有绑最出版物的两个月里,该查询将返回两行。如果您希望Oracle任意挑选一个,则可以使用分析函数
row_number
而不是rank
。 - 如果表格中的
PUBDATE
列仅在该书发布的月份的第一个月份有午夜日期,则可以删除PUBDATE
列中的trunc
列。
谢谢你的帮助贾斯汀。当我使用你的陈述时,我发现我没有得到最大数量的书。关于可能发生什么的任何想法? – user1078958
@ user1078958 - 如果您可以发布DDL创建表格,某些DML可以填充一些示例数据,您期望的输出和您获得的输出,这将有所帮助。我们猜测你的表有哪些数据。你能解释你得到的结果,以及它们与你想要的结果有什么不同吗? –
感谢您提供关于DDL和一些DML的建议。这将有助于未来的问题。至于这个例子,我终于能够得到一些有效的东西。非常感谢您的帮助。 :-) – user1078958