mysql中给查询结果添加序号列

  成一个字段(非表中字段)用以记录排序   【类比为oracle数据库中的rownum】

    MySQL中一个表(表名:stuscore)

    字段有:id(主键)、stuid(学号)、sname(学生姓名)、subject(课程名称)、score(分数)

    

    列出数学成绩排名 (要求显示字段:排名,姓名 , 课程名称, 分数 , 学号)

    用于排名的字段,查询时此处将其用 pm表示

    

     select (@i:[email protected]+1)pm,s.* from stuscore s,(select @i:=0)t where s.subject=‘数学‘

    order by score desc;

    思想:事先定义一个变量,通过变量的递加以及虚拟表的联查达到生成序列号的目的。

    select * from table1,table2 不加任何条件时,是把两个表的数据笛卡尔积之后显示,

    如上sql中的  t  这张表  其实就是 一条 i=0 的数据

    mysql存储过程中,定义变量有两种方式:

    1、使用set或select直接赋值,变量名以 @开头

      赋值符号:使用set 时可以用 “=“或者“:=”     但是使用select赋值时必须使用“:=”赋值

      例如: [email protected]=1;

    可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。

    mysql总变量不用事先声明,在用的时候直接用@变量名 使用即可

   【先行记录】

    2以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
          DECLARE var1 INT DEFAULT 0;

    主要用在存储过程中,或者是给存储传参数中

    两者的区别是:

      在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则

      不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在

      是这个会话内的全局变量。

    在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。
    例:
      set @v_sql= sqltext;
      PREPARE stmt FROM @v_sql;  
      EXECUTE stmt;     
      DEALLOCATE PREPARE stmt;

  

原文地址:https://www.cnblogs.com/northern-light/p/8494711.html

时间: 2024-09-29 12:55:55

mysql中给查询结果添加序号列的相关文章

mysql中模糊查询的四种用法介绍

下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件 SELECT * FROM [user] WHERE u_name LIKE

给DataTable添加序号列

如何在datatable中添加一序号列,编号从1依次递增,并且在第一列? /// <summary>        /// 在DataTable中添加一序号列,编号从1依次递增        /// </summary>        /// <param >DataTable</param>        /// <returns></returns>        private DataTable AddSeriNumToDat

AspxGridView添加序号列

using System.Globalization;//CultureInfo需要 protected void AspxGridView_stock_HtmlDataCellPrepared(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewTableDataCellEventArgs e) { if (e.DataColumn.Caption.Trim() == "序号") { e.Cell.Text = ((e.Vis

mysql中条件查询加排序和索引的关系

跟一个朋友,不错公司的主管交流时,对于mysql中条件查询和排序时 与索引的关系 mysql> explain select * from article where title='希望光伏企业挺过2个月' o rder by id desc\\\\\\\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: article type: index pos

GridView添加序号列

在GridView控件第0列添加序号列: <asp:BoundField HeaderText="序号" > <ItemStyle HorizontalAlign="Center" /> <HeaderStyle HorizontalAlign="Center" Width="30px" /> </asp:BoundField> 为GridView添加OnRowDataBound

ASP.NET 为GridView添加序号列,且支持分页连续累计显示

为GridView添加序号列,且支持分页连续累计显示,废话不多说,直接上代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 T

MySQL中的查询事务问题

之前帮同学做个app的后台,使用了MySQL+MyBatis,遇到了一个查询提交的问题,卡了很久,现在有时间了来复盘下 环境情况 假设有学生表: USE test; CREATE TABLE `student` ( Id int NOT NULL PRIMARY KEY AUTO_INCREMENT, Name varchar(20) NOT NULL, Grade int NOT NULL ) mybatis项目目录的大致结构为: +---src | +---main | | +---java

SQL Server查询时添加一列连续的自增列

在SQL Server数据库中表信息会用到Identity关键字来设置自增列.但是当有数据被删除的话,自增列就不连续了.如果想查询出这个表的信息,并添加一列连续自增的ID,可用如下查询语句: select Row_Number() over ( order by getdate() ) as init , * from 表名

给mysql查询添加序号列

select *,(@number := @number+1) AS number from (select u.mobile,u.`name`, ROUND((select sum(r.realAmount) from t_recharge r where r.userid=u.id and r.status='1' ),2)rechargeSum, ROUND((select sum(w.realAmount) from t_withdrawal w where w.userid=u.id