Ruby on rails 如何使用活动记录查询接口编写此查询?
我有Ruby on rails 如何使用活动记录查询接口编写此查询?,ruby-on-rails,postgresql,jsonb,Ruby On Rails,Postgresql,Jsonb,我有产品表,表中有jsonb类型规格列。 此json中的一个键是品牌 我可以像这样成功运行查询: 选择规格->>“品牌”作为品牌,按品牌从产品组中计算(*) brand | count -------------+------- Acer | 9 Dell | 4 XPS 15 | 1 Apple | 1 Lenovo | 2 Gigabyte | 1 El
产品
表,表中有jsonb类型规格
列。
此json中的一个键是品牌
我可以像这样成功运行查询:
选择规格->>“品牌”作为品牌,按品牌从产品组中计算(*)代码>
brand | count
-------------+-------
Acer | 9
Dell | 4
XPS 15 | 1
Apple | 1
Lenovo | 2
Gigabyte | 1
Eluktronics | 5
Asus | 2
HP | 1
如何使用活动记录查询界面运行此查询
我试过这样的方法:
产品。选择(“规格->>“品牌”作为品牌”)。组(“品牌”)。计数
但它不起作用,我得到:
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "AS"
LINE 1: SELECT COUNT(specs ->> 'brand' AS brand) AS count_specs_bran...
^
: SELECT COUNT(specs ->> 'brand' AS brand) AS count_specs_brand_as_brand, brand AS brand FROM "products" GROUP BY brand
from (irb):1
以下各项应能起作用,并更贴近活动记录ORM查询界面:
Product.all.group("specs ->> 'brand'").count
您不应将别名作为品牌
;active record将为此提供自己的别名,您可以在试用此语句后在rails控制台中查看该别名。以下内容应起作用,并更贴近active record ORM查询界面:
Product.all.group("specs ->> 'brand'").count
您不应将别名作为品牌
;active record将为此提供自己的别名,您可以在试用此语句后在rails控制台中查看该别名。关于产品如何。选择(“specs->>“brand”作为品牌,count(*))。组('brand')
?@SergioTulentsev,当我运行它并尝试使用.first.brand
获取第一个元素的brand时,我获取ActiveRecord::StatementInvalid:PG::GroupingError:ERROR:column“products.id”必须出现在GROUP BY子句中或用于聚合函数行1:。。。按“产品”按品牌订单从“产品”组中计算(*)…^:选择规格->>“品牌”作为品牌,按“产品”从“产品”组按“产品”顺序计算(*)。“id”ASC限额1美元从(irb):14
确定,这是因为首先添加按“产品”顺序。.id“ASC限额1
。是的,你的答案是有效的:)那么产品如何。选择(“specs->>‘brand’作为品牌,count(*))。group(‘brand’)
?@SergioTulentsev,当我运行它并尝试使用获取第一个元素的品牌时。first.brand
我获取ActiveRecord::statement无效:PG::GroupingError:column“products.id”必须出现在GROUP BY子句中或用于聚合函数第1行:。。。按“产品”按品牌订单从“产品”组中计算(*)…^:选择规格->>“品牌”作为品牌,按“产品”从“产品”组按“产品”顺序计算(*)。“id”ASC限额1美元从(irb):14
确定,这是因为首先添加按“产品”顺序。.id“ASC限额1
。所以,是的,你的答案是有效的:)