【问题标题】:Rails PostgreSQL problems with order statementRails PostgreSQL 的订单语句问题
【发布时间】:2010-11-02 13:59:56
【问题描述】:

嗨 我将数据库从 mySql 更改为 PostgreSQL,每次使用 :order 语句查询时都会出错

例如以下代码在 MySQL 中完美运行

Hour.sum("working_hours",:conditions=>['project_id=? AND reported_date=?',project,h.reported_date],:order=>"reported_date

但是在 PostgreSQL 中给我一个错误

PGError:错误:列“hours.reported_date”必须出现在 GROUP BY 子句中或用于聚合函数中 第 1 行:...rted_date='2010-10-06 00:00:00.000000') 按reported_d 排序..
: SELECT sum("hours".working_hours) AS sum_working_hours FROM "hours" WHERE (project_id=1 AND reported_date='2010-10-06 00:00:00.000000') ORDER BY reported_date

如果我删除订单语句,则查询正常
我将非常感谢有关此主题的任何帮助

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord


    【解决方案1】:

    PostreSQL 比 MySQL 对 SQL 标准更严格。

    SQL 指出,如果您按列ORDER,则该列必须是SELECTed 并出现在GROUP BY 子句中。

    试试这个:

    Hour.sum("working_hours",:conditions=>['project_id=? AND reported_date=?',project,h.reported_date], :order=>"reported_date", :group_by => "working_hours"
    

    【讨论】:

    • 这个查询实际上返回了一个按reported_date分组的有序哈希值。如果他想要所有工作时间的总和,这不会给他正确的答案。
    • PGError: ERROR: column "hours.reported_date" 必须出现在我尝试过但我仍然收到错误 GROUP BY 子句或用于聚合函数 LINE 1: ...:00: 00.000000') GROUP BY working_hours ORDER BY reported_d...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多