我正在寻找一种对结果集(而非表格)中的行进行顺序编号的方法。本质上,我从如下查询开始:
SELECT id, name FROM people WHERE name = 'Spiewak'
id
显然不是真正的序列(例如 1, 2, 3, 4
)。我需要的是结果集中包含这些自动编号的另一列。如果必须的话,我愿意使用 SQL 函数,但我宁愿不使用 ANSI 规范的扩展。
平台是 MySQL,但技术应该尽可能跨平台(因此希望避免非标准扩展)。
最佳答案
要获得有意义的行号,您需要对结果进行排序。然后你可以这样做:
SELECT id, name
, (SELECT COUNT(*) FROM people p2 WHERE name='Spiewak' AND p2.id <= p1.id) AS RowNumber
FROM people p1
WHERE name = 'Spiewak'
ORDER BY id
请注意,子查询的 WHERE 子句需要匹配主查询的 WHERE 子句或主键和主查询的 ORDER BY。
SQL Server 有 ROW_NUMBER() OVER 结构来简化这个,但我不知道 MySQL 是否有什么特别的方法来解决它。
由于我在这里的帖子被接受为答案,我还想引用 Dan Goldstein 的回复,该回复在方法上非常相似,但使用 JOIN 而不是子查询并且通常会执行得更好
关于sql - 用于在结果集中自动编号行的纯 SQL 技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/202245/