我在匹配表中有以下数据:
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]}
我想按名称选择表中最后一个不同的团队。i、 e.我希望查询返回:
6;{"Name":"TeamA","Players":[{"Name":"CCC"},{"Name":"BBB"}
6;{"Name":"TeamB","Players":[{"Name":"AAA"},{"Name":"DDD"}
因此,上次该团队出现在表中时的每个团队
我一直在使用以下内容(从这里):
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';
但这返回:
ERROR: could not identify an equality operator for type json
SQL state: 42883
Character: 1680
我理解Postgres对JSON没有平等性。我只需要球队的名字(一个字符串)相等,球队的球员不需要比较。
有人能建议一种替代方法吗?
供参考:
SELECT id, json_array_elements(match->'Teams') AS team FROM matches
回报:
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"}]}"
编辑:我转换到文本,在这个问题之后,我使用了DISTINCT ON
,而不是
GROUP BY
。以下是我的完整查询:
WITH t AS (SELECT id, json_array_elements(match->'Teams') AS team
FROM matches ORDER BY id DESC)
SELECT DISTINCT ON (team->>'Name') id, team FROM t;
返回上面我想要的。有人有更好的解决方案吗?
更短、更快、更优雅,侧面连接:
SELECT DISTINCT ON (t.team->>'Name') t.team
FROM matches m, json_array_elements(m.match->'Teams') t(team);
ORDER BY t.team->>'Name', m.id DESC; -- to get the "last"
如果您只需要不同的团队,则可以使用排序依据。相关:
Postgres中的json数据类型没有相等运算符,但jsonb有一个相等运算符(Postgres 9.4):
问题内容: 我在匹配表中有以下数据: 我想按名称在表中选择每个最后一个不同的团队。即我想要一个查询,将返回: 因此,上次出现该团队的每个团队都显示在表格中。 我一直在使用以下内容: 但这返回: 我知道Postgres没有JSON的相等性。我只需要团队名称(字符串)相等即可,无需比较该团队的球员。 任何人都可以建议其他方法吗? 以供参考: 返回: 编辑:我投与到并遵循此问题,我代替。这是我的完整查询
问题内容: 我正在使用Postgres的json数据类型,但想对嵌套在json中的数据进行查询/排序。 我想订购或查询json数据类型上的.where。例如,我要查询关注者计数> 500的用户,或者要按关注者或关注计数进行订购。 谢谢! 例: 问题答案: 对于任何偶然发现的人。我想出了一个使用ActiveRecord和Postgres的JSON数据类型的查询列表。随时对其进行编辑以使其更加清晰。
我的模式中有一个Postgres'json'列。这是我代码中的列映射: 这不起作用,插入时得到的堆栈跟踪显示: 我也试过: 也会产生同样的错误。
问题内容: 我的数据库是Postgres8。我需要将数据类型转换为另一个。这意味着column数据类型之一是并且需要在语句中将其与Postgres一起转换。 当前,我获取字符串值并将其转换为Java语言。 有什么办法吗?示例代码将不胜感激。 问题答案: cast(varchar_col AS int) – SQL standard 要么 这些语法变体在 任何地方 (几乎)都有效。第二种在特殊情况下
主要内容:1、字符串,2、数字,3、布尔值,4、空,5、对象,6、数组JSON 是 Web 开发中使用最广泛的数据交换格式,它独立于编程语言,能够被大多数编程语言使用。本节我们来详细介绍一下 JSON 中支持的数据类型。 JSON 中支持的数据类型可以分为简单数据类型和复杂数据类型两种,其中简单数据类型包括:string(字符串)、number(数字)、boolean(布尔值)和 null(空);复杂数据类型包括:Array(数组)和 Object(对象)。 1、字
我已经将Luxon创建的datetime值保存到postgres数据库列中,类型为TIMESTAMP(3)。然后我想使用这个值,把它转换成其他时区,等等。然而,我似乎想不出如何“利用”它。 我使用以下方法创建了该对象: 然后,我将其插入到postgres数据库中,插入时间戳(3)类型的列中。 我使用查询从数据库中提取它。当我记录它时,它说它的值是: 我可以找到很多关于如何将日期插入sql的教程,但