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
。所以,是的,你的答案是有效的:)