当我有 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
我不明白为什么。 请帮帮我 我有客户 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