相关疑难解决方法(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万
查看次数

Postgres中的GROUP BY - JSON数据类型不相等?

我在匹配表中有以下数据:

5;{"Id":1,"Teams":[{"Name":"TeamA","Players":[{"Name":"AAA"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"CCC"},{"Name":"DDD"}]}],"TeamRank":[1,2]}
6;{"Id":2,"Teams":[{"Name":"TeamA","Players":[{"Name":"CCC"},{"Name":"BBB"}]},{"Name":"TeamB","Players":[{"Name":"AAA"},{"Name":"DDD"}]}],"TeamRank":[1,2]}
Run Code Online (Sandbox Code Playgroud)

我想按名称选择表格中每个最后一个不同的团队.即我想要一个将返回的查询:

6;{"Name":"TeamA","Players":[{"Name":"CCC"},{"Name":"BBB"}
6;{"Name":"TeamB","Players":[{"Name":"AAA"},{"Name":"DDD"}
Run Code Online (Sandbox Code Playgroud)

所以每个团队从上次那个团队出现在表中.
我一直在使用以下(从这里):

WITH t AS (SELECT id, json_array_elements(match->'Teams') AS team FROM matches)
SELECT MAX(id) AS max_id, team FROM t GROUP BY team->'Name';
Run Code Online (Sandbox Code Playgroud)

但这回归:

ERROR: could not identify an equality operator for type json
SQL state: 42883
Character: 1680
Run Code Online (Sandbox Code Playgroud)

我知道Postgres 没有JSON的相等性.我只需要团队名称(字符串)的相等性,该团队中的队员不需要进行比较.

任何人都可以建议另一种方法吗?
以供参考:

SELECT id, json_array_elements(match->'Teams') AS team FROM matches
Run Code Online (Sandbox Code Playgroud)

收益:

5;"{"Name":"TeamA","Players":[{"Name":"AAA"},{"Name":"BBB"}]}"
5;"{"Name":"TeamB","Players":[{"Name":"CCC"},{"Name":"DDD"}]}"
6;"{"Name":"TeamA","Players":[{"Name":"CCC"},{"Name":"BBB"}]}"
6;"{"Name":"TeamB","Players":[{"Name":"AAA"},{"Name":"DDD"}]}"
Run Code Online (Sandbox Code Playgroud)

编辑:我转向text并关注这个问题,我用DISTINCT ON而不是GROUP BY.这是我的完整查询:

WITH t AS (SELECT id, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql json greatest-n-per-group lateral

18
推荐指数
1
解决办法
1万
查看次数

优雅的PostgreSQL Group for Ruby on Rails/ActiveRecord

尝试使用PostgreSQL检索按日期分组的ActiveRecord对象数组.

更具体地说,我正在尝试翻译以下MySQL查询:

@posts = Post.all(:group => "date(date)", 
   :conditions => ["location_id = ? and published = ?", @location.id, true], 
   :order => "created_at DESC")
Run Code Online (Sandbox Code Playgroud)

我知道PostgreSQL对SQL标准的解释比MySQL更严格,因此这种类型的查询不起作用......并且已经阅读了StackOverflow和其他主题上的一些帖子 - 但它们似乎都没有关于这个问题的明确答案

我已经尝试过各种各样的查询组合,分组和不同的条款没有太大的乐趣 - 目前我有一个相当不优雅的黑客,虽然作品让我脸红时看着它.

使用Rails和PostgreSQL进行此类查询的正确方法是什么?(忽略肯定这应该在ActiveRecord级别抽象出来的事实)

postgresql activerecord ruby-on-rails

11
推荐指数
1
解决办法
6622
查看次数

如果在生产和开发中使用不同的RDBMS(例如PostgreSQL),SQLite何时不能用于在Django中进行测试?

即使您在开发和生产中使用另一个RDBMS(我使用PostgreSQL),本文也建议使用SQLite进行测试.我尝试了SQLite用于一个测试用例,它确实运行得更快(大约18.8倍,0.5秒对9.4秒!).

在哪些情况下可以使用SQLite导致不同的测试结果比我使用PostgreSQL?

只有我测试一段包含原始SQL查询的代码?

sqlite testing django postgresql

1
推荐指数
1
解决办法
464
查看次数