sql - 当我有 PG::UndefinedColumn: ERROR

标签 sql ruby-on-rails postgresql activerecord having

我不明白为什么。 请帮帮我 我有客户表,有很多订单。所以客户(id),订单(id,customer_id)。我想得到所有少于 100 个订单的客户。所以我对 postgres 进行 sql 查询(我使用 Rails 和 ActiveRecord),但是查询是

SELECT customers.*, COUNT(*) AS c_c FROM "customers" LEFT OUTER JOIN orders ON orders.customer_id = customers.id GROUP BY "customers"."id" HAVING c_c < 100 OR orders.id IS NULL

我有一个错误

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column "c_c" does not exist

为什么?我该怎么做?

最佳答案

查询本身看起来无效。您不能从 HAVING 子句中引用带别名的列。你的 COUNT(*) 也是模棱两可的。您可以通过在 HAVING 中将 c_c 替换为 COUNT(orders.id) 来修复,并添加 COUNT(orders.id):

SELECT customers.*, COUNT(orders.id) AS c_c FROM "customers" LEFT OUTER JOIN orders ON orders.customer_id = customers.id GROUP BY "customers"."id" HAVING COUNT(orders.id) < 100 OR orders.id IS NULL

编辑

对于 ActiveRecord 查询试试这个:

Customer.joins("LEFT JOIN orders ON orders.customer_id = customers.id").group("customers.id").having("COUNT(orders.id) < 100")

确保您在 Customer 中定义了一个 has_many :orders

关于sql - 当我有 PG::UndefinedColumn: ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37047115/

相关文章:

PostgreSQL:VACUUM FULL 还是 CLUSTER?

postgresql - postgresql 数字/十进制二进制表示 & Cocoa

java - 将表从 Postgres 数据库(在服务器上)导出到 java 中的 csv 文件(在本地)

mysql - 带变量的 SQL 更新语句

ruby-on-rails - Mongoid 嵌入式文档中的时间戳

ruby-on-rails - RSpec 和测试设计的邮件

javascript - 当用户浏览到另一个页面(同一站点)时,模态音频播放器会继续流式传输而不会中断

sql - 如何在sql中对链表进行排序?

mysql - 当 mysql 查询中缺少数据时,我想显示关系数据

python - 使用 SQLAlchemy 继承参数的 SQLite 和 Postgres 部分索引支持