使用Oracle,我选择了title_id及其相关的出版月份:
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);
我能够确定出版图书数量最多的月份。
有没有办法加入这两个语句,以便我可以将月份的文本等效与最大标题数相关联?
答案 0 :(得分:3)
为了将一个月转换为字符串,我不会使用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
另外几点需要注意
row_number
分析函数而不是rank
。PUBDATE
列仅包含发布图书的月份的第一天午夜,则可以删除trunc
列上的PUBDATE
。< / LI>