小编Erw*_*ter的帖子

获取PostgreSQL查询的执行时间

DECLARE @StartTime datetime,@EndTime datetime

SELECT @StartTime=GETDATE()

select distinct born_on.name
from   born_on,died_on
where (FLOOR(('2012-01-30'-born_on.DOB)/365.25) <= (
    select max(FLOOR((died_on.DOD - born_on.DOB)/365.25))
    from   died_on, born_on
    where (died_on.name=born_on.name))
    )
and   (born_on.name <> All(select name from died_on))

SELECT @EndTime=GETDATE()

SELECT DATEDIFF(ms,@StartTime,@EndTime) AS [Duration in millisecs]
Run Code Online (Sandbox Code Playgroud)

我无法获得查询时间.相反,我收到以下错误:

sql:/home/an/Desktop/dbms/query.sql:9: ERROR:  syntax error at or near "@"
LINE 1: DECLARE @StartTime datetime,@EndTime datetime
Run Code Online (Sandbox Code Playgroud)

sql postgresql performance

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

Postgres - 将行转置为列

我有下表,它为每个用户提供了多个电子邮件地址.

在此输入图像描述

我需要将其展平为用户查询的列.根据创建日期向我提供"最新"3个电子邮件地址.

user.name | user.id | email1          | email2           | email3**

Mary      | 123     | mary@gmail.com  | mary@yahoo.co.uk | mary@test.com

Joe       | 345     | joe@gmail.com   | [NULL]           | [NULL]
Run Code Online (Sandbox Code Playgroud)

sql database postgresql transpose crosstab

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

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

从函数返回setof记录(虚拟表)

我需要一个Postgres函数来返回一个带有自定义内容的虚拟表(就像在Oracle中一样).该表将有3列和未知行数.

我在互联网上找不到正确的语法.

想象一下:

CREATE OR REPLACE FUNCTION "public"."storeopeninghours_tostring" (numeric)
  RETURNS setof record AS
DECLARE
  open_id ALIAS FOR $1;
  returnrecords setof record;
BEGIN
  insert into returnrecords('1', '2', '3');
  insert into returnrecords('3', '4', '5');
  insert into returnrecords('3', '4', '5');
  RETURN returnrecords;
END;
Run Code Online (Sandbox Code Playgroud)

这怎么写的正确?

sql postgresql stored-procedures plpgsql

37
推荐指数
5
解决办法
8万
查看次数

PostgreSQL MAX和GROUP BY

我有一张桌子id,yearcount.

我想得到MAX(count)每个id并保持year它发生的时间,所以我做这个查询:

SELECT id, year, MAX(count)
FROM table
GROUP BY id;
Run Code Online (Sandbox Code Playgroud)

不幸的是,它给了我一个错误:

错误:列"table.year"必须出现在GROUP BY子句中或用于聚合函数

所以我尝试:

SELECT id, year, MAX(count)
FROM table
GROUP BY id, year;
Run Code Online (Sandbox Code Playgroud)

但是,它没有做MAX(count),它只是显示表格.我想是因为分组的时候yearid,它得到最大的id是特定年份的.

那么,我该如何编写该查询呢?我想要得到idMAX(count),并在今年这种情况发生的时候.

sql postgresql group-by max greatest-n-per-group

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

PostgreSQL函数中语言sql和语言plpgsql的区别

我是数据库开发的新手,所以我对以下示例有些怀疑:

函数f1() - 语言sql

 create or replace function f1(istr  varchar) returns text as $$ 
 select 'hello! '::varchar || istr;
 $$ language sql;
Run Code Online (Sandbox Code Playgroud)

函数f2() - 语言plpgsql

 create  or replace function f2(istr  varchar)
 returns text as $$ 
 begin select 'hello! '::varchar || istr; end;
 $$ language plpgsql;
Run Code Online (Sandbox Code Playgroud)
  • 这两个函数都可以像select f1('world')或一样调用select f2('world').

  • 如果我打电话select f1('world')输出将是:

    `hello! world`
    
    Run Code Online (Sandbox Code Playgroud)
  • 输出select f2('world'):

    错误:查询没有结果数据的目的地提示:如果要丢弃SELECT的结果,请改用PERFORM.语境:在SQL语句中PL/pgSQL函数f11(字符变化)第2行 ******错误******

  • 我想知道的差异,在哪些情况下我应该使用language sqllanguage plpgsql …

sql postgresql stored-procedures function plpgsql

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

如果未找到记录,则返回一个值

我有这个简单的声明:

SELECT idnumber FROM dbo.database WHERE number = '9823474'
Run Code Online (Sandbox Code Playgroud)

如果表中的任何位置都不存在该数字,则会失败.我想在这个声明中添加一些内容:
如果没有记录,则返回NULL,不要行.

有什么建议?

sql null select record

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

将常见查询存储为列?

使用PostgreSQL,我有很多查询,如下所示:

SELECT <col 1>, <col 2>
     , (SELECT sum(<col x>)
        FROM   <otherTable> 
        WHERE  <other table foreignkeyCol>=<this table keycol>) AS <col 3>
FROM   <tbl>
Run Code Online (Sandbox Code Playgroud)

鉴于子选择在每种情况下都是相同的,有没有办法将该子选择存储为表中的伪列?基本上,我希望能够从表A中选择一列,它是表B中与记录相关的特定列的总和.这可能吗?

postgresql database-design view

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

如何在PostgreSQL中获取与视图或表关联的触发器

我有一个要求,我必须得到与给定表/视图关联的触发器列表.
任何人都可以帮我找到PostgreSQL中表的触发器吗?

sql database postgresql

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

在查询中合并连接JSON(B)列

使用Postgres 9.4,我正在寻找一种方法来合并查询中的两个(或更多)jsonjsonb列.以下表为例:

  id | json1        | json2
----------------------------------------
  1   | {'a':'b'}   | {'c':'d'}
  2   | {'a1':'b2'} | {'f':{'g' : 'h'}}
Run Code Online (Sandbox Code Playgroud)

是否可以让查询返回以下内容:

  id | json
----------------------------------------
  1   | {'a':'b', 'c':'d'}
  2   | {'a1':'b2', 'f':{'g' : 'h'}}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法定义此处所述的功能.这可能是"传统"查询吗?

postgresql json jsonb postgresql-9.4

36
推荐指数
7
解决办法
3万
查看次数