我正在寻找一种对 结果集中的 行(而不是表)进行顺序编号的方法。本质上,我从如下查询开始:
SELECT id, name FROM people WHERE name = 'Spiewak'
该ids为显然不是一个真正的序列(如1, 2, 3, 4)。我需要的是结果集中的另一列,其中包含这些自动编号。如果愿意的话,我愿意使用SQL函数,但是我宁愿不使用ANSI规范的扩展名。
id
1, 2, 3, 4
平台是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而不是子查询,并且通常会表现得更好