我在PostgreSQL 8.3中有一个简单的SQL查询,可以获取一堆注释.我在子句中为构造提供了一个值的排序列表:INWHERE
SELECT * FROM comments WHERE (comments.id IN (1,3,2,4));
Run Code Online (Sandbox Code Playgroud)
这将以任意顺序返回注释,在我碰巧是ids之类的1,2,3,4.
我希望结果行像IN构造中的列表一样排序:(1,3,2,4).
怎么实现呢?
我正在尝试测试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专家,所以我不知道我做错了什么.
假设我有一个这样的表:
subject | flag
----------------+------
this is a test | 2
Run Code Online (Sandbox Code Playgroud)
subject属于类型text,flag属于类型int.我想在Postgres中将此表转换为类似的内容:
token | flag
----------------+------
this | 2
is | 2
a | 2
test | 2
Run Code Online (Sandbox Code Playgroud)
是否有捷径可寻?
我有一个整数数组类型的列.如何将所有这些合并为一个整数数组?
例如:如果我执行查询:
select column_name from table_name
Run Code Online (Sandbox Code Playgroud)
我得到的结果集如下:
-[RECORD 1]----------
column_name | {1,2,3}
-[RECORD 2]----------
column_name | {4,5}
Run Code Online (Sandbox Code Playgroud)
我如何得到{1,2,3,4,5}最终结果?
最近升级到使用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的电子邮件""?
我在谷歌或文档中找到答案时遇到问题......
我需要针对数组类型做一个不区分大小写的选择.
因此,如果:
value = {"Foo","bar","bAz"}
Run Code Online (Sandbox Code Playgroud)
我需要
SELECT value FROM table WHERE 'foo' = ANY(value)
Run Code Online (Sandbox Code Playgroud)
匹配.
我尝试了很多lower()的组合而没有成功.
ILIKE而不是=似乎工作,但我一直很紧张LIKE- 这是最好的方式吗?
我正在试验jsonb在Postgres 9.4 中的Postgres 字段中保留以下值:
[{"event_slug":"test_1","start_time":"2014-10-08","end_time":"2014-10-12"},
{"event_slug":"test_2","start_time":"2013-06-24","end_time":"2013-07-02"},
{"event_slug":"test_3","start_time":"2014-03-26","end_time":"2014-03-30"}]
Run Code Online (Sandbox Code Playgroud)
我正在执行以下查询:
SELECT * FROM locations
WHERE EXISTS (
SELECT 1 FROM jsonb_array_elements(events) AS e
WHERE (
e->>'event_slug' = 'test_1' AND
(
e->>'start_time' >= '2014-10-30 14:04:06 -0400' OR
e->>'end_time' >= '2014-10-30 14:04:06 -0400'
)
)
)
Run Code Online (Sandbox Code Playgroud)
如何利用上述查询为该数据创建索引?这对于几百万行来说听起来是否合理?每行包含〜10个事件?
值得注意的是,我似乎仍在进行顺序扫描:
CREATE INDEX events_gin_idx ON some_table USING GIN (events);
Run Code Online (Sandbox Code Playgroud)
我猜是因为我在查询中做的第一件事就是将数据转换为json数组元素.
在PostgreSQL 9.4中,窗口函数具有a的新选项,FILTER用于选择窗口框架的子集以进行处理.文档提到了它,但没有提供样本.在线搜索会产生一些样本,包括来自2ndQuadrant的样本,但我发现的所有样本都是具有常量表达式的相当简单的例子.我要找的是一个包含当前行值的过滤器表达式.
假设我有一堆包含一堆列的表,其中一列是date类型:
col1 | col2 | dt ------------------------ 1 | a | 2015-07-01 2 | b | 2015-07-03 3 | c | 2015-07-10 4 | d | 2015-07-11 5 | e | 2015-07-11 6 | f | 2015-07-13 ...
date在整个表上处理的窗口定义很简单:WINDOW win AS (ORDER BY dt)
我有兴趣知道在当前行(包括)之前的4天中存在多少行.所以我想生成这个输出:
col1 | col2 | dt | count -------------------------------- 1 | a | 2015-07-01 | 1 2 | b | 2015-07-03 | 2 3 …
表用户:
id | firstname | lastname
---+-----------+---------
1 | John | Smith
2 | Adam | Tensta
3 | Anna | Johansson
Run Code Online (Sandbox Code Playgroud)
我想按照ID 2,3,1的顺序选择它们.仅由id-field指定.这可能吗?
我在想类似的东西 SELECT * FROM users ORDER BY id ORDER(2,3,1)
可以这样做,在那种情况下如何?
给这样一个数组:
my_array = [2,3,5,23,4]
Run Code Online (Sandbox Code Playgroud)
和这样的表格:
column1 | column2
---------+----------
1 |
2 |
3 |
4 |
5 |
Run Code Online (Sandbox Code Playgroud)
如何将数组值插入表中.粗略地我想用SQL做这样的事情:
for item in my_array:
UPDATE my_table SET colum2 = item
Run Code Online (Sandbox Code Playgroud)
更新的表应该是这样的
column1 | column2
---------+----------
1 | 2
2 | 3
3 | 5
4 | 23
5 | 4
Run Code Online (Sandbox Code Playgroud)
更新:我正在使用Python psycopg2,但我想知道是否有一种方法与纯SQL.
postgresql ×10
sql ×10
arrays ×2
json ×2
jsonb ×2
lateral ×2
sql-order-by ×2
indexing ×1
split ×1
sql-in ×1