Oracle10g 最大聚合函数为Oracle的CASE表达式

Oracle10g 最大聚合函数为Oracle的CASE表达式,oracle10g,aggregate-functions,case,Oracle10g,Aggregate Functions,Case,使用Oracle,我选择了标题_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' WHE

使用Oracle,我选择了标题_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);
我能够确定出版书籍最多的月份

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

有没有办法将这两个语句连接起来,这样我就可以将月份的文本等价物与最大标题数关联起来?

为了将月份转换为字符串,我不会使用
CASE
语句,我只会使用
来表示字符。您可以使用分析函数对结果进行排序,以获得出版书籍最多的月份

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任意选择一个,可以使用
    行数
    分析函数,而不是
  • 如果表中的
    PUBDATE
    列的日期仅为书籍出版月份的第一个月的午夜,则可以删除
    PUBDATE
    列中的
    trunc

谢谢你的帮助,贾斯汀。当我使用你的陈述时,我发现我没有得到最大数量的书。关于可能发生的事情有什么想法吗?@user1078958-如果您可以发布DDL来创建表,发布一些DML来填充一些示例数据,以及您期望的输出和您获得的输出,这将非常有帮助。我们正在猜测您的表实际包含哪些数据。你能解释一下你得到的结果以及它们与你想要的结果有什么不同吗?谢谢你关于DDL和一些DML的建议。这将有助于解决未来的问题。至于这个例子,我终于能够得到一些有效的东西。非常感谢您的帮助。:-)