相关疑难解决方法(0)

必须出现在GROUP BY子句中或用于聚合函数

我有一张看起来像这个来电者'makerar'的桌子

 cname  | wmname |          avg           
--------+-------------+------------------------
 canada | zoro   |     2.0000000000000000
 spain  | luffy  | 1.00000000000000000000
 spain  | usopp  |     5.0000000000000000
Run Code Online (Sandbox Code Playgroud)

我想为每个cname选择最大平均值.

SELECT cname, wmname, MAX(avg)  FROM makerar GROUP BY cname;
Run Code Online (Sandbox Code Playgroud)

但我会收到一个错误,

ERROR:  column "makerar.wmname" must appear in the GROUP BY clause or be used in an   aggregate function 
LINE 1: SELECT cname, wmname, MAX(avg)  FROM makerar GROUP BY cname;
Run Code Online (Sandbox Code Playgroud)

所以我这样做

SELECT cname, wmname, MAX(avg)  FROM makerar GROUP BY cname, wmname;
Run Code Online (Sandbox Code Playgroud)

但这不会给出意图的结果,并显示下面的错误输出.

 cname  | wmname |          max           
--------+--------+------------------------
 canada …
Run Code Online (Sandbox Code Playgroud)

sql group-by aggregate-functions postgresql-9.1

240
推荐指数
5
解决办法
27万
查看次数

查询JSON类型中的数组元素

我正在尝试测试jsonPostgreSQL 9.3中的类型.
我在一个json名为data的表中调用了一列reports.JSON看起来像这样:

{
  "objects": [
    {"src":"foo.png"},
    {"src":"bar.png"}
  ],
  "background":"background.png"
}
Run Code Online (Sandbox Code Playgroud)

我想查询表中所有与'objects'数组中'src'值匹配的报告.例如,是否可以在数据库中查询匹配的所有报告'src' = 'foo.png'?我成功写了一个可以匹配的查询"background":

SELECT data AS data FROM reports where data->>'background' = 'background.png'
Run Code Online (Sandbox Code Playgroud)

但由于"objects"有一系列的价值观,我似乎无法写出有用的东西.是否可以在数据库中查询匹配的所有报告'src' = 'foo.png'?我查看了这些来源,但仍然无法得到它:

我也尝试过这样的事情,但无济于事:

SELECT json_array_elements(data->'objects') AS data from reports
WHERE  data->>'src' = 'foo.png';
Run Code Online (Sandbox Code Playgroud)

我不是SQL专家,所以我不知道我做错了什么.

sql postgresql json lateral jsonb

96
推荐指数
2
解决办法
12万
查看次数

如何在json列中查询空对象?

想要查找某个json列包含空对象的所有行,{}.这可以使用JSON数组,或者如果我在对象中查找特定键.但我只是想知道对象是否为空.似乎找不到会这样做的运营商.

 dev=# \d test
     Table "public.test"
  Column | Type | Modifiers
 --------+------+-----------
  foo    | json |

 dev=# select * from test;
    foo
 ---------
  {"a":1}
  {"b":1}
  {}
 (3 rows)

 dev=# select * from test where foo != '{}';
 ERROR:  operator does not exist: json <> unknown
 LINE 1: select * from test where foo != '{}';
                                      ^
 HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
 dev=# select * from …
Run Code Online (Sandbox Code Playgroud)

postgresql json types jsonb

55
推荐指数
4
解决办法
4万
查看次数

与Postgresql JSON数据列不同

试图在带有rails的模式上做区别.

2.1.1 :450 > u.profiles.select("profiles.*").distinct


Profile Load (0.9ms)  SELECT DISTINCT profiles.* FROM "profiles" INNER JOIN "integration_profiles" ON "profiles"."id" = "integration_profiles"."profile_id" INNER JOIN "integrations" ON "integration_profiles"."integration_id" = "integrations"."id" WHERE "integrations"."user_id" = $1  [["user_id", 2]]
PG::UndefinedFunction: ERROR:  could not identify an equality operator for type json
LINE 1: SELECT DISTINCT profiles.* FROM "profiles" INNER JOIN "integ...
                        ^
: SELECT DISTINCT profiles.* FROM "profiles" INNER JOIN "integration_profiles" ON "profiles"."id" = "integration_profiles"."profile_id" INNER JOIN "integrations" ON "integration_profiles"."integration_id" = "integrations"."id" WHERE "integrations"."user_id" = $1
ActiveRecord::StatementInvalid: …
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails ruby-on-rails-3 postgresql-json

38
推荐指数
3
解决办法
2万
查看次数

使用UNION时无法识别json []类型的等号运算符

我正在尝试使用UNION规则在单个表上执行多个查询

我有两张桌子:

  • 项目(id,name,pinned BOOLEAN)
  • 技能(m2m到项目)

我希望首先得到一组pinned设置为的行,true并用最新的条目填充剩余的(pinned设置为false)

SELECT
  project.id AS project_id,
  project.name AS project_name,
  array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.pinned = true
GROUP BY project_id,project_name

UNION

SELECT
  project.id AS project_id,
  project.name AS project_name,
  array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.id != 1 AND project.pinned = false
GROUP BY project_id,project_name
ORDER …
Run Code Online (Sandbox Code Playgroud)

postgresql union json

27
推荐指数
2
解决办法
2万
查看次数

PostgreSQL必须出现在GROUP BY子句中,或者用在聚合函数中

我在pg生产模式下收到此错误,但它在sqlite3开发模式下工作正常.

 ActiveRecord::StatementInvalid in ManagementController#index

PG::Error: ERROR:  column "estates.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "estates".* FROM "estates"  WHERE "estates"."Mgmt" = ...
               ^
: SELECT "estates".* FROM "estates"  WHERE "estates"."Mgmt" = 'Mazzey' GROUP BY user_id

@myestate = Estate.where(:Mgmt => current_user.Company).group(:user_id).all
Run Code Online (Sandbox Code Playgroud)

postgresql production ruby-on-rails-3.1

26
推荐指数
4
解决办法
6万
查看次数

在JSON列中查询数组元素

最近升级到使用PostgreSQL 9.3.1来利用JSON功能.在我的表中,我有一个json类型的列,其结构如下:

{
   "id": "123",
   "name": "foo",
   "emails":[
      {
        "id": "123",
        "address": "somethinghere"
      },
      {
        "id": "456",
        "address": "soemthing"
      }
   ]
} 
Run Code Online (Sandbox Code Playgroud)

这只是用于问题目的的虚拟数据.

是否可以根据ID查询电子邮件数组中的特定项?
差不多:"返回id = 123的电子邮件""?

sql postgresql json lateral postgresql-9.3

24
推荐指数
2
解决办法
2万
查看次数