我有一个简单的查询,如:
SELECT name FROM people;
该people
表没有唯一ID列。我想添加到查询结果列id
增量int
从0或1开始(这并不重要)。一个人怎么能做到这一点?(PostgreSQL数据库)
用途ROW_NUMBER()
:
SQLFiddle
SELECT
name,
ROW_NUMBER() OVER (ORDER BY name) AS id
FROM people;
编辑:
ORDER BY 1
vs之间的区别ORDER BY column_name
SQLFiddleDemo
SELECT
name,
ROW_NUMBER() OVER (ORDER BY name) AS id
FROM people;
/* Execution Plan */
QUERY PLAN WindowAgg (cost=83.37..104.37 rows=1200 width=38)
-> Sort (cost=83.37..86.37 rows=1200 width=38)
**Sort Key: name**
-> Seq Scan on people (cost=0.00..22.00 rows=1200 width=38)
SELECT
name,
ROW_NUMBER() OVER (ORDER BY 1) AS id
FROM people;
/* Execution Plan */
QUERY PLAN WindowAgg (cost=0.00..37.00 rows=1200 width=38)
-> Seq Scan on people (cost=0.00..22.00 rows=1200 width=38)
在第二种情况下,没有排序操作。
您还可以将第二个查询编写为:
SELECT
name,
ROW_NUMBER() OVER () AS id
FROM people;
人们为什么ORDER BY 1
在窗口函数中编写代码?
因为在某些方言中,它是必需的,并且ORDER BY 1
充当占位符。
甲骨文:
ORA-30485:窗口规范中缺少ORDER BY表达式
SELECT
name,
ROW_NUMBER() OVER (ORDER BY 1) AS id
FROM people;
TSQL:
函数“ ROW_NUMBER”必须具有带有ORDER BY的OVER子句。
SELECT
name,
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS id
FROM people;
我有一个现有的dataframe,我需要在其中添加一个额外的列,该列的每一行都包含相同的值。 现有df: 新df: 我知道如何附加现有的series/dataframe列。但这是另一种情况,因为我只需要添加“Name”列,并将每一行设置为相同的值,在本例中为“abc”。
问题内容: 我需要创建一个基本上只保留索引列表的表。因此,我创建了一个表,其中只有一个自动递增的列,称为“ id”。但是,我似乎无法向该表隐式添加自动递增的值。 我知道通常在表中有这样一列(不仅有此列)时,您可以执行以下操作: 插入表(col1,col2 …)值(val1,val2 …) 而且,如果您不指定自动递增的列,它将自动获取一个值。但是,类似: 插入表()值()插入表插入表() 等等。所有
如果我在 SQL Server 2008 中使用以下 SQL 命令来更新具有外键约束的表: 是表中我的FK列。我正在尝试引用我的表中的。我收到这个错误: 外键“UserID”引用引用表“员工”中的无效列“UserID”。
问题内容: 如何在SQL Server 2000 / SQL Server 2005中的现有表中添加具有默认值的列? 问题答案: 句法: 例子: 笔记: 可选的约束名称: 如果省略,将自动生成 一个带有有趣名称的 如果您的,则 无论您是否指定,它都会自动对所有现有记录使用默认值WITH VALUES。 插入如何与默认约束一起使用: 如果将记录插入到SomeTable并且不指定SomeCol的值,则
我的html文件生成一个表: 如何在每次生成新行时将id分配给第一个td?
问题内容: 从: http://docs.python.org/py3k/library/datetime.html#timedelta- objects timedelta对象代表持续时间,即两个日期或时间之间的差。 那么,为什么我会出错: 问题答案: 对象不支持除了用秒。 虽然有一个自然的定义,时钟算术。您可以这样计算: 将datetime.time提升到一个对象,然后添加增量,然后将结果回落