【问题标题】:MySQL query to select results with auto increment as a new column added in the resultMySQL查询以选择具有自动增量的结果作为结果中添加的新列
【发布时间】:2012-08-08 09:43:21
【问题描述】:

我有一个包含以下字段的学生表:

student(student_id, student_name, student_avg)

我需要在 MySQL 中编写一个查询,它将结果显示为:

序列号=> 结果还应该有一个序列号为1,2,3,...,n 的新列,就像结果中每一行的自动增量一样。

student_id
student_name
student_avg > 4

我不想以任何方式改变我的桌子。我所要做的就是编写一个查询,它会给我上述结果。我希望我很清楚。

示例数据:

student_id         student_name      student_avg 
 1                    abc               2.5
 2                    xyz               4.1
 3                    def               4.2     

查询后的示例输出:

serial_no    student_id    student_name     student_avg
  1             2            xyz               4.1
  2             3            def               4.2

【问题讨论】:

  • 请粘贴您的表格并输出样本
  • student_id student_name student_avg 1 abc 2.5 2 xyz 4.1 3 def 4.2 样本输出serial_no student_id student_name student_avg 1 2 xyz 4.1 2 3 def 4.2
  • AFAIK 有 mysql 8.0 的窗口函数 rank() over(...)row_number()

标签: mysql


【解决方案1】:

试试这个

SELECT  @s:=@s+1 serial_number,student_id,student_name,student_avg
FROM    students,
        (SELECT @s:= 0) AS s
WHERE
student_avg > 4;

https://stackoverflow.com/a/11096550/1423506

【讨论】:

  • 非常感谢您节省了我的时间 :)
  • 以前发现过类似的东西。但是对我来说有一个问题:当我将它与另一个 order by 结合使用时,增量编号不再排序,它显然是在排序之前应用的。有什么想法吗?
【解决方案2】:
SET @serial=0;
SELECT @serial := @serial+1 AS `serial_number`, `column_name` FROM `table_name`;

在您的特定情况下:

SET @serial=0;

SELECT 
   @serial := @serial+1 AS `serial_number`, 
   `student_id`, 
   `student_name`, 
   `student_avg`
FROM 
   `students`
WHERE
   `student_avg` > 4;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2021-10-10
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多