我不明白为什么。 请帮帮我 我有客户表,有很多订单。所以客户(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/