我的 Postgres 数据库中有以下两个表:
CREATE TABLE User (
Id serial UNIQUE NOT NULL,
Login varchar(80) UNIQUE NOT NULL,
PRIMARY KEY (Id,Login)
);
CREATE TABLE UserData (
Id serial PRIMARY KEY REFERENCES Users (Id),
Password varchar(255) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
假设我添加了一个新用户,INSERT INTO Users(Id, Login) VALUES(DEFAULT, 'John')并且还想添加VALUES(id, 'john1980')John的新 ID UserData。id
我如何获得该 ID?对刚刚创建的东西运行查询似乎是多余的。我在数据库中遇到过多次这样的情况。也许我的设计总体上有缺陷?
(我显然不会像那样存储密码。)
sql postgresql database-design primary-key common-table-expression
我有一张像这样的桌子
create table installs (datetime date,installs int);
insert into installs (date, installs)
values
('10-01-2014', 2),
('10-02-2014', 4),
('10-03-2014', 1),
('10-04-2014', 10)
Run Code Online (Sandbox Code Playgroud)
所以我们的表数据看起来像这样

给定这个表,我想要一个可以生成几天内安装计数的查询。
所以我正在寻找的结果集是

例如,查看 day 的记录10/2/2014。
共有day_out=04 个安装。在那之后的一天 ( days_out=1),现在总共有 5 个安装(10/2 起有 4 个安装,10/3 起有 1 个安装)在那之后的第二天 ( days_out=2),总共有 15 个安装(前 2 天有 5 个安装) ,4号新增10个)
我之前在一个更大的查询中很容易地做到了这一点,只是使用内部选择来获取安装计数(当场对它们求和),但是,这不再是削减它......所以我能想到的唯一解决方案是创建一个值表,然后将其与更大的查询连接起来。
我编写此查询时遇到的唯一问题是我不知道如何执行:)。
如果有人能为这个问题想出一个更好的标题,我会改变它,当我不确定该朝哪个方向发展时,很难命名这个标题。
我一直在阅读有关 Postgres 中的 With Query 的内容。这就是我惊讶的地方
WITH RECURSIVE t(n) AS (
VALUES (1)
UNION ALL
SELECT n+1 FROM t WHERE n < 100
)
SELECT sum(n) FROM t;
Run Code Online (Sandbox Code Playgroud)
我无法理解查询的评估是如何工作的。
关于 SQL 中递归语句的崩溃如何发生的任何见解。
我正在开发一个简单的评论系统,用户可以在其中评论其他评论,从而创建层次结构。为了按层次顺序获取评论,我在 Postgres 中使用了公共表表达式。
以下是使用的字段和查询:
id
user_id
parent_comment_id
message
WITH RECURSIVE CommentCTE AS (
SELECT id, parent_comment_id, user_id
FROM comment
WHERE parent_comment_id is NULL
UNION ALL
SELECT child.id, child.parent_comment_id, child.user_id
FROM comment child
JOIN CommentCTE
ON child.parent_comment_id = CommentCTE.id
)
SELECT * FROM CommentCTE
Run Code Online (Sandbox Code Playgroud)
上面的查询以广度优先的方式返回记录:
id parent_comment_id user_id
10 null 30
9 null 30
11 9 30
14 10 31
15 10 31
12 11 30
13 12 31
Run Code Online (Sandbox Code Playgroud)
但是是否可以修改它以实现如下所示的内容,其中以深度优先的方式为该评论集一起返回记录?重点是通过这种方式获取数据,让前端渲染更加流畅。
id parent_comment_id user_id
9 null 30
11 9 30
12 11 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写这样的查询
WITH a AS (SELECT key FROM table)
SELECT *
FROM a
JOIN b;
Run Code Online (Sandbox Code Playgroud)
这会在 PostgreSQL 10.4 中产生语法错误。
为什么会出现这个错误?
看起来我将创建一个视图。有更好的解决方案吗?
对于 SQL 服务器,有一个这样的确切问题,但我使用的是 Postgres 9.3 并且','没有用
我正在比较两个不同的年份。例如 2016 年和 2015 年
我会检查用户在 2 年的课程中是否在相同科目上获得了任何不良成绩。
我的代码如下
with currentyeargrade (
select ....
from (...
...)t)
with previousyeargrade(
select ....
from (...
...)y)
select *
from currentyeargrade cyg
inner join previousyeargrade pvg on pvg.userid = cyg.userid
Run Code Online (Sandbox Code Playgroud)
我是一名 SQL 开发人员,我没有创建临时表的管理员权限。
如果同一个表中的更新使用两个 CTE 导致数量为 0,我试图从我的库存表中删除一条记录。更新插入正在工作,但删除没有生成我期望的结果。库存表中的数量正在更改为零,但记录并未被删除。表结构:
CREATE TABLE IF NOT EXISTS stock_location (
stock_location_id SERIAL
, site_code VARCHAR(10) NOT NULL
, location_code VARCHAR(50) NOT NULL
, status CHAR(1) NOT NULL DEFAULT 'A'
, CONSTRAINT pk_stock_location PRIMARY KEY (stock_location_id)
, CONSTRAINT ui_stock_location__keys UNIQUE (site_code, location_code)
);
CREATE TABLE IF NOT EXISTS stock (
stock_id SERIAL
, stock_location_id INT NOT NULL
, item_code VARCHAR(50) NOT NULL
, quantity FLOAT NOT NULL
, CONSTRAINT pk_stock PRIMARY KEY (stock_id)
, CONSTRAINT ui_stock__keys UNIQUE (stock_location_id, item_code)
, …Run Code Online (Sandbox Code Playgroud) 我在 Databricks 中有一个 spark 数据框。我正在尝试使用通用表表达式 (CTE) 运行一些 sql 查询。这是前 10 行数据
+----------+----------+------+---+---+---------+-----------------+
| data_date| user_id|region|sex|age|age_group|sum(duration_min)|
+----------+----------+------+---+---+---------+-----------------+
|2020-01-01|22600560aa| 1| 1| 28| 2| 0.0|
|2020-01-01|17148900ab| 6| 2| 60| 5| 1138.0|
|2020-01-01|21900230aa| 5| 1| 43| 4| 0.0|
|2020-01-01|35900050ac| 8| 1| 16| 1| 224.0|
|2020-01-01|22300280ad| 6| 2| 44| 4| 8.0|
|2020-01-02|19702160ac| 2| 2| 55| 5| 0.0|
|2020-02-02|17900020aa| 5| 2| 64| 5| 264.0|
|2020-02-02|16900120aa| 3| 1| 69| 6| 0.0|
|2020-02-02|11160900aa| 6| 2| 52| 5| 0.0|
|2020-03-02|16900290aa| 5| 1| 37| 3| 0.0|
+----------+----------+------+---+---+---------+-----------------+
Run Code Online (Sandbox Code Playgroud)
在这里,我将每个用户注册日期存储在 regs CTE …
common-table-expression apache-spark apache-spark-sql databricks
我试图弄清楚如何将 Table1 中的数据插入到 Table2 中,然后使用 Table2 中新创建的 ID 来更新 Table1 中的相应行。
我使用 Postgres 12.4 是为了它的价值
示例:我有两个表,例如users和metadata
用户表有以下列
| id | info | metadata_id |
Run Code Online (Sandbox Code Playgroud)
元数据表有以下列
| id | data |
Run Code Online (Sandbox Code Playgroud)
我想将表中的所有info值迁移到表的列users中,并使用相应的值更新我的值(当前为空白),本质上是回填外键。datametadatausers.metadata_idmetadata.id
有什么办法可以优雅地完成这个任务吗?我有一个工作查询,它锁定两个表并创建一个临时序列以插入到 and 中metadata.id,users.metadata_id但这似乎很脆弱,我需要在元数据表中现有的最高 ID 之后启动序列,这并不理想。
我还尝试使用带有 RETURNING 子句的数据修改 CTE 来更新表users,但无法使其正常工作。
sql postgresql common-table-expression sql-update sql-insert
我有一个出勤表,如下所示:

我试图将人们的出席(编码为 ABC、DEF 等)联系在一起。我希望最终结果如下所示:显示每个部分/出勤链的开始和结束日期。如果人 A 从 2021-01-01 到 2021-01-4 参加,那么它应该显示为一行,因为它是一个连续的链。我不知道该怎么做或从哪里开始。这是一种奇怪的出勤数据保存方式。

更多信息:我不知道这是否重要,但我最多有 20 列,因为我们的出席人数最多为 20 人。所以这取决于Col20。
postgresql ×7
sql ×7
sql-server ×2
apache-spark ×1
databricks ×1
join ×1
primary-key ×1
sql-delete ×1
sql-insert ×1
sql-update ×1