当我有 PG::UndefinedColumn: ERROR

When I do having PG::UndefinedColumn: ERROR

我不明白为什么。 请帮帮我 我有客户 table,有很多订单。所以客户(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) 并在 SELECT 中添加 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

您不能使用 c_c 拥有

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