【问题标题】:PostgreSQL group by and order byPostgreSQL group by 和 order by
【发布时间】:2015-02-27 04:07:15
【问题描述】:

我有一个带有日期列的表格。我想计算月数并按月顺序显示它们。月份应显示为“Jan”、“Feb”等。如果我使用 to_char 函数,则顺序发生在文本上。我可以使用 extract(month from dt),但这也会以数字格式显示月份。这是报告的一部分,月份应仅以“星期一”格式显示。

SELECT to_char(dt,'Mon'), COUNT(*)  FROM tb GROUP BY to_char(dt,'Mon') ORDER BY to_char(dt,'Mon');
 to_char | count 
---------+-------
 Dec     |     1
 Jan     |     1
 Jul     |     2

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:
    select month, total
    from (
        select
            extract(month from dt) as month_number,
            to_char(dt,'mon') as month,
            count(*) as total
        from tb
        group by 1, 2
    ) s
    order by month_number
    

    【讨论】:

    • 我试图在我的报告中不使用数字格式的月份。那可能吗?编辑了我的问题以添加此内容。
    • @Jayadevan 你不能只通过别名使用所需的列吗?我为编辑后的答案中的列提供了别名。
    • 我在 perl 脚本中使用它并将输出转储到 excel 中。现在 perl 数组正被转储到 excel 中。如果我有额外的列,我将不得不挑选元素。这就是为什么我试图只获取我需要的那些列。可能正在编写外部查询以仅选择那些列可能有效。从理论上讲,如果我编写一个外部查询,则顺序不太可能保持不变,不是吗,尽管出于所有实际目的,它将被排序。
    • 如果您能解释一下这个查询为什么以及如何回答这个问题,那就太好了。其他用户将来很难将纯代码答案应用于他们自己的情况。
    猜你喜欢
    • 2011-06-28
    • 2017-02-06
    • 1970-01-01
    • 2022-01-16
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    相关资源
    最近更新 更多