相关疑难解决方法(0)

按IN值列表排序

我在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).
怎么实现呢?

sql postgresql sql-order-by sql-in

146
推荐指数
7
解决办法
9万
查看次数

查询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万
查看次数

在Postgres中将列拆分为多行

假设我有一个这样的表:

    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)

是否有捷径可寻?

sql postgresql split set-returning-functions

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

如何将所有记录中的所有整数数组合并到postgres中的单个数组中

我有一个整数数组类型的列.如何将所有这些合并为一个整数数组?

例如:如果我执行查询:

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}最终结果?

sql arrays postgresql

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

在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万
查看次数

PostgreSQL对数组不敏感的SELECT

我在谷歌或文档中找到答案时遇到问题......
我需要针对数组类型做一个不区分大小写的选择.

因此,如果:

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- 这是最好的方式吗?

sql postgresql case-insensitive pattern-matching

20
推荐指数
3
解决办法
9018
查看次数

在Postgres jsonb中查询数组结构的正确索引是什么?

我正在试验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数组元素.

sql postgresql indexing set-returning-functions jsonb

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

引用窗口函数的FILTER子句中的当前行

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 …

sql postgresql window-functions postgresql-9.4

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

如何按特定订单排序

表用户:

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)

可以这样做,在那种情况下如何?

sql postgresql sql-order-by

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

如何将数组项插入PostgreSQL表

给这样一个数组:

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.

sql arrays postgresql

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