设置一个顺序列,可以手动赋值的 建议用整形数值
查询的时候 除了根据Id 进行排序外 对顺序列进行分组 排序,这样应该能解决你说的需求。
这个用limit应该查不出吧楼主提问的举例, TOP 1 WITH TIES查询结果应该不是A和D.如果按存款顺序排,结果是E如果按存款倒序排,结果是B和C.
楼主可以这样试试:
A B C D E,存款分别为100 200 200 100 50
CREATE TABLE a (id VARCHAR(1),number INT)
INSERT INTO a VALUES ('A',100),('B',200),('C',200),('D',100),('E',50)
SELECT * FROM a ORDER BY number DESC
idnumber
B200
C200
A100
D100
E50
SELECT
tmp.id,tmp.number,@rownum := @rownum+1,
IF (
@p <>tmp.number, @rank := @rank + 1, @rank := @rank ) AS rank
, @p := tmp.number
FROM
(SELECT id,number FROM a ORDER BY number DESC) tmp,
(SELECT @rownum :=0 , @p :=NULL, @rank :=1) a
idnumber@rownum := @rownum+1rank@p := tmp.number
B2001 1 200
C2002 1200
A1003 2100
D1004 2100
E505350
要取存款是200的直接外面套一层 rank<=1就行了
没有系统学习过mysql,今日想查询前n条记录,习惯性的输入sqlserver的selecttop n的形式语句,报错,一查,原来mysql通过limit可以实现相关功能,而且功能更加强大,GOOD。以下是limit在mysql中的使用详解:语法:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。mysql>SELECT * FROM table LIMIT 5,10// 检索记录行 6-15 ,注意,10为偏移量//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:mysql>SELECT * FROM table LIMIT 95,-1// 检索记录行 96-last.//如果只给定一个参数,它表示返回最大的记录行数目:mysql>SELECT * FROM table LIMIT 5//检索前 5 个记录行 //也就是说,LIMIT n 等价于 LIMIT 0,n。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)