【问题标题】:add a column from a select query with index从带有索引的选择查询中添加一列
【发布时间】:2018-11-07 13:26:43
【问题描述】:

如何从选择查询中添加一列,但新列的值将是选择查询的行数。

select quantity from menu;

然后像这样返回

+--------+
|quantity|
+--------+
|   50   |
|   32   |
|   23   |
+--------+

但我想要这样的东西

+----------+--------+
|new column|quantity|
+----------+--------+
|     1    |   50   |
|     2    |   32   |
|     3    |   23   |
+----------+--------+

新列应该从 1 开始,并从 select 查询语句的行数结束。任何答案都会有所帮助谢谢

【问题讨论】:

  • 您是否可以访问最新版本的 MySQL(8.0.2 及更高版本)?
  • 是的,先生,我有。

标签: mysql sql


【解决方案1】:

由于you can access the latest version of MySQL,我们可以简单地使用Row_Number()功能:

SELECT  
  ROW_NUMBER() OVER () AS new_column, 
  quantity 
FROM menu;

【讨论】:

    【解决方案2】:

    你可以使用:

    select row_number() over (order by quantity desc) as col1, quantity
    from menu;
    

    这假设您希望按数量按降序排列的行。

    【讨论】:

      【解决方案3】:

      见:https://stackoverflow.com/a/6055852/3368558

      你的例子:

      select @rownum:=@rownum+1 as rowNum, quantity 
      from menu  
      CROSS JOIN (SELECT @rownum:=0) AS user_init;
      

      【讨论】:

        【解决方案4】:

        在这种情况下,您需要首先使用 SET 定义变量 @inc,然后分配默认值 0。

        然后您将@inc 作为您的 SELECT 语句的一部分。您甚至可以使用 AS 为变量表达式命名。

        作为 SELECT 的一部分,您还负责增加 @inc 中的值。

        代码如下所示:

        SET @inc :=0;
        SELECT
         @inc := @inc + 1 AS a, 
        `some_field` 
        FROM 
        `some_table`;
        

        希望能有所帮助!

        【讨论】:

          猜你喜欢
          • 2017-06-15
          • 2018-02-18
          • 1970-01-01
          • 1970-01-01
          • 2021-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多