将表列添加到 Group by 子句 - Ruby on Rails - Postgresql

2024-05-26

我正在尝试使用 Heroku,显然 Postgresql 对于聚合函数来说比 SQL 严格得多。当我推送到 Heroku 时,我收到一条错误消息,内容如下。

关于另一个问题 https://stackoverflow.com/questions/2686055/error-when-pushing-to-heroku-appear-in-group-ruby-on-rails我问我收到了一些指导,说我应该将列添加到我的 group by 子句中,但我不知道该怎么做。请参阅下面的完整错误和 PostsControll#index。

SELECT posts.*, count(*) as vote_total FROM "posts"   INNER JOIN "votes" ON votes.post_id = posts.id   GROUP BY votes.post_id ORDER BY created_at DESC LIMIT 5 OFFSET 0):

帖子控制器

def index
    @tag_counts = Tag.count(:group => :tag_name, 
       :order => 'count_all DESC', :limit => 20)
       conditions, joins = {}, :votes

    @ugtag_counts = Ugtag.count(:group => :ugctag_name, 
       :order => 'count_all DESC', :limit => 20)
       conditions, joins = {}, :votes

    @vote_counts = Vote.count(:group => :post_title, 
          :order => 'count_all DESC', :limit => 20)
          conditions, joins = {}, :votes


       unless(params[:tag_name] || "").empty?
         conditions = ["tags.tag_name = ? ", params[:tag_name]]
         joins = [:tags, :votes]
       end
       @posts=Post.paginate(
                 :select => "posts.*, count(*) as vote_total", 
                 :joins => joins, 
                 :conditions=> conditions, 
                 :group => "votes.post_id", 
                 :order => "created_at DESC",
                 :page => params[:page], :per_page => 5)
        @popular_posts=Post.paginate(
                 :select => "posts.*, count(*) as vote_total", 
                 :joins => joins, 
                 :conditions=> conditions, 
                 :group => "votes.post_id", 
                 :order => "vote_total DESC",
                 :page => params[:page], :per_page => 3)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @posts }
      format.json { render :json => @posts }
      format.atom
    end
  end

MySQL 和 SQLite 非常灵活,它们允许选择列表中的列,而无需在GROUP BY子句(而不是在聚合函数内,例如COUNT())。但这种程度的灵活性可能会导致查询不明确。

PostgreSQL 仅与 ANSI SQL 标准一样严格。我测试过的所有其他数据库(Oracle、Microsoft、IBM DB2、Firebird)在这个问题上的表现都与 PostgreSQL 类似。

你需要做的就是列出以下内容posts选择列表中的列与您的选择列表中命名的列相匹配GROUP BY条款。通过选择更少的列或添加列来执行此操作:group.

我不是 Rails 专家,我找不到如何将多个列作为参数传递给:group。查看 active_record/base.rb 的代码,它似乎只是将选项值复制到文字 SQL 中GROUP BY条款。所以我想(没有尝试过)你可以这样做:

...
:group => "posts.post_id, posts.foo, posts.bar, posts.baz", 
...

请注意,您必须命名every选择列表中不属于聚合函数的列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将表列添加到 Group by 子句 - Ruby on Rails - Postgresql 的相关文章

随机推荐

  • 如何使用 Twitter Bootstrap 弹出窗口进行 jQuery 验证通知?

    我可以使用弹出窗口出现引导程序 http twitter github com bootstrap很容易 我还可以使用标准进行验证jQuery 验证插件 http docs jquery com Plugins Validation or
  • OOP 中的对象和结构有什么区别?

    对象与结构体有何区别 我们何时以及为何使用对象而不是结构体 数组与两者有何不同 何时以及为何使用数组而不是对象或结构 我想了解每个的用途 显然 您可以根据您的编程风格模糊这些区别 但通常结构是结构化的数据块 对象是可以执行某种任务的主权实体
  • 使用系统签名的应用程序关闭 Android 设备电源

    我正在开发一个Android应用程序 我们需要在某些情况下关闭设备电源 我在很多地方都读到过 您需要有 root 权限的手机才能执行此操作 然后 您可以使用 Java 的 API 发出 rebo ot 命令 try Process proc
  • 在html中绘制Konvajs容器Stage的边框边缘

    我正在使用 Konvajs 库 我正在尝试在主框架周围放置一个边框框Stage元素 但似乎无法使其工作 CSS仅适用于 div 和Konva Stageelement 似乎没有这方面的特定属性 是在舞台层的 4 个边框上添加线条形状的唯一方
  • 如何为文本添加发光效果?

    我还没有真正找到任何好的简单的动画发光效果教程 如何为文本设置发光动画 如果您只想使用 CSS3 您甚至不必使用任何 jQuery JavaScript 只需在 CSS 中执行以下操作 confirm selection webkit tr
  • Godot 接管了 Xcode 中的 .scn 文件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 最近安装了Godot 现在 Xcode 将不会预览 scn 文件 我无法将类型更改回 SceneKit 因为它在下拉列表中不可用 尝试这个
  • 组织外部 JavaScript 文件的好方法是什么?

    在具有大量 HTML 页面的 ASP NET Web 应用程序中 会积累大量内联 JavaScript 函数 将它们组织到外部文件中的好计划是什么 大多数函数都是特定于为其编写的页面的 但也有少数与整个应用程序相关 单个文件可能会变得相当大
  • 匹配可能存在或可能不存在的组

    我的正则表达式需要解析一个如下所示的地址 BLOOKKOKATU 20 A 773 00810 HELSINKI SUOMI 1 2 3 4 第一组 第二组和第三组将始终存在于地址中 第 4 组可能不存在 我编写了一个正则表达式来帮助我获得
  • SQLAlchemy:如何过滤日期字段?

    这是模型 class User Base birthday Column Date index True in database it s like 1987 01 17 我想在两个日期之间进行过滤 例如选择 18 30 年区间内的所有用户
  • Codeigniter:将 sess_match_ip 设置为 FALSE 是否仍然安全

    我正在开发一个网站 来自某些国家 地区的访问者面临 codeigniter 缓存系统的问题 缓存在一两个请求后被删除 经过深入调查后 我将 sess match ip 和 sess match useragent 设置为 FALSE 现在一
  • 水平对齐徽标和导航链接

    我一直在尝试将导航部分中的两个 div 以相同的方式对齐 我已经添加了左右浮动 但这不起作用 正如您在图像中看到的那样 它们之间始终存在 2 或 3 个像素间隙 http postimg org image lgtxebtpx http p
  • IOS:init(CGImage) 的使用不明确

    我正在尝试转换CGImage into a CIImage 但是 它不起作用 这行代码 let personciImage CIImage CGImage imageView image CGImage 抛出以下错误 init CGImag
  • 使用 simple_form Rails 时测试 HTML 5 表单验证

    我正在为我的待办事项列表应用程序使用 devise 和 simple form 现在 我的 users edit html erb 有以下代码 h2 Edit profile h2 我的 user rb 看起来像这样 class User
  • 在Java中从控制台打开包中的类

    因此 当我尝试从命令提示符打开一个不在包中的 java 类时 一切正常 但是当我尝试打开一个包中的类时 它会给我 NoClassDefFoundError 错误 当我尝试打开类 java somepackage someclass 时列出包
  • ASPXAUTH Cookie 的安全标志

    我们有一个面向外部的应用程序 由外部安全公司进行了渗透测试 应用程序在 ASP NET MVC4 上开发并在 IIS8 Windows 2012 Server 上运行 报告的漏洞之一是 ASPXAUTH 不安全 当我检查 cookie 检查
  • Python 2.7 中四舍五入到小数点后两位?

    使用Python 2 7如何将我的数字四舍五入到小数点后两位而不是它给出的10位左右 print financial return of outcome 1 str out1 使用内置函数round https docs python or
  • 有没有办法在 NodeJS 中生成受密码保护的 XLSX?

    我正在寻找 npm 包或任何其他解决方法 以便能够生成带有密码的 xlsx 文件 我不想保护工作表或单元格 我希望整个文件受到密码保护 我发现了一些非常好的软件包 excel4node exceljs 但它们都无法满足我的需要 任何建议表示
  • Git 存储库错误并显示消息,它不是存储库...但它是

    我有一个 git repo 去年我一直在同一个盒子上使用 今天我跑步git status并得到错误消息 fatal Not a git repository or any parent up to mount parent home Sto
  • Android上如何动态添加LinearLayout?

    我有一个长度为 n 的数组 现在需要创建 n 个 LinearLayout 并在每个上添加不同的内容 怎样才能动态地完成呢 LinearLayout lLayout new LinearLayout context parentWidget
  • 将表列添加到 Group by 子句 - Ruby on Rails - Postgresql

    我正在尝试使用 Heroku 显然 Postgresql 对于聚合函数来说比 SQL 严格得多 当我推送到 Heroku 时 我收到一条错误消息 内容如下 关于另一个问题 https stackoverflow com questions