sql - 用于在结果集中自动编号行的纯 SQL 技术

标签 sql mysql

我正在寻找一种对结果集(而非表格)中的行进行顺序编号的方法。本质上,我从如下查询开始:

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/

相关文章:

php - MYSQL 查询最新结果

sql - Sequelize hasMany,belongsTo,还是两者都有?

php - 在 MySQL 数据库中有很多空值可以吗?

php - 设计 WordPress 主题

php - 如何在MySQL和PHP中显示所有产品的所有类别?

服务器重启后mysql运行存储过程

mysql - 从表中选择,其中值在同一表的另一列上重复

sql - 将平面表解析为树的最有效/优雅的方法是什么?

sql - 由于 LEFT JOIN 或子查询,无法在 View 上创建 CLUSTERED INDEX

python - SQLAlchemy 使用单个数据库查询更新多个对象上的多个字段