相关疑难解决方法(0)

PostgreSQL中的计算/计算/虚拟/派生列

PostgreSQL是否支持计算/计算列,如MS SQL Server?我在文档中找不到任何内容,但由于此功能包含在许多其他DBMS中,我认为我可能会遗漏某些内容.

例如:http://msdn.microsoft.com/en-us/library/ms191250.aspx

postgresql materialized-views calculated-columns sql-view generated-columns

92
推荐指数
4
解决办法
8万
查看次数

如何根据其他列的值和选择在postgres中创建列?

我想在我的表中创建一个新字段(或两个),这是其他字段的串联,这似乎相对简单.但是我用什么case语法或if/when语法来帮助创建以下字段(GPA_TXT,和newfield)?

逻辑是:每个GPA应该是#.#,每个新字段应该是:

name & "-" & GPA_TXT & (
    case where GPA_TXT > 3.3
        set newfield = newfield & 'GradeA',
    case where GPA_TXT >2.7 and GPA_TXT < 3.3
        set newfield = newfield & "GradeB",
    etc...
)
Run Code Online (Sandbox Code Playgroud)

例如:

name         major     GPA(num) GPA_TXT   [newfield]
Bob          sci       2        02.0      Bob-sci-GradeC-02.0
Jane         chem      3.1      03.1      Jane-chem-GradeB-03.1
Charlie      phys      3.7      03.7      Charlie-phys-GradeA-03.7
Garfield     food      0        00.0      Garfield-food-GradeF-00.0
Run Code Online (Sandbox Code Playgroud)

所以我想我在这里有两个问题:

  1. 如何创建GPA TXT字段.
  2. 如何根据其他字段中的值编写case语句来计算字段.

如果有人可以通过示例或解释将我链接到资源,我会非常感激!我正在查看文档,但没有示例,没有任何地方.

postgresql

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

PostgreSQL更新触发器

我有一张桌子:

CREATE TABLE annotations
(
  gid serial NOT NULL,
  annotation character varying(250),
  the_geom geometry,
  "rotationAngle" character varying(3) DEFAULT 0,
  CONSTRAINT annotations_pkey PRIMARY KEY (gid),
  CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
  CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 4326)
)
Run Code Online (Sandbox Code Playgroud)

并触发:

CREATE TRIGGER set_angle
AFTER INSERT OR UPDATE
ON annotations
FOR EACH ROW
EXECUTE PROCEDURE setangle();
Run Code Online (Sandbox Code Playgroud)

功能:

CREATE OR REPLACE FUNCTION setAngle() RETURNS TRIGGER AS $$
BEGIN
IF    TG_OP = 'INSERT' THEN
    UPDATE annotations SET "rotationAngle" = degrees( ST_Azimuth( ST_StartPoint(NEW.the_geom), ST_EndPoint(NEW.the_geom) ) )-90 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql triggers plpgsql

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

Why am I getting a an error when creating a generated column in PostgreSQL?

CREATE TABLE my_app.person
(
    person_id smallserial NOT NULL,
    first_name character varying(50),
    last_name character varying(50),
    full_name character varying(100) generated always as (concat(first_name, ' ', last_name)) STORED,
    birth_date date,
    created_timestamp timestamp default current_timestamp,
    PRIMARY KEY (person_id)
);
Run Code Online (Sandbox Code Playgroud)

Error: generation expression is not immutable

The goal is to populate the first name and last into the full name column.

sql postgresql database-design string-concatenation calculated-columns

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

在 PostgreSQL 查询中使用函数表示法而不是点表示法

假设我们有两个表:

  1. contacts具有列的表:idname
  2. conversations具有列的表:idcontact_id(FK 到contacts.id)

以下两个查询返回相同的数据:

  • 点符号: SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON contacts.id = conversations.contact_id;

  • 函数符号: SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON id(contacts) = contact_id(conversations);

出于纯粹的理论原因,我想了解更多有关第二个(功能更强大)版本的信息。这种语法叫什么?我可以在哪里了解更多信息?这是 SQL 标准中的语法还是 PostgreSQL 中的语法?性能好吗?为什么它没有得到更广泛的应用?

sql postgresql join

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

Count Aggregate Dot Count语法(.count)

因此,当我意外地提到我的CTE中不存在的"计数"列时,我遇到了我认为是一个奇怪的错误.Postgres正在寻找GROUP BY子句,即使我不认为我在做聚合.多一点玩,看起来table.count相当于一个计数星函数.考虑以下:

SELECT
    c.clinic_id,
    c.count,
    count(*) as count_star
FROM clinic_member c
GROUP BY 
 c.clinic_id
ORDER BY clinic_id;
Run Code Online (Sandbox Code Playgroud)

这将在我的数据集中生成如下所示的结果:

在此输入图像描述

有兴趣了解Postgres的实际语法规则是什么,我尝试在文档中搜索对此语法的引用,但无法找到任何内容; 只有很多计数(*)的文档.任何人都可以解释这是否是有效的SQL以及是否还有其他聚合函数也可以类似地调用?Postgres文档的链接如果存在则会很棒.

注意.这是Postgres 9.5.9

sql postgresql count aggregate-functions

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