给定一个表的MySQL:查询返回的行偏移只有
field1 | field2
abc | 1
efg | 30
etc | 10
我想运行像SELECT offset() FROM table WHERE field1 = 'etc' ORDER BY field2 DESC
查询这样的假想查询应该返回2
(排序由field2 desc
,field1 = etc
是第二排)
任何干净的方式来做到这一点?
感谢
给定一个表的MySQL:查询返回的行偏移只有
field1 | field2
abc | 1
efg | 30
etc | 10
我想运行像SELECT offset() FROM table WHERE field1 = 'etc' ORDER BY field2 DESC
查询这样的假想查询应该返回2
(排序由field2 desc
,field1 = etc
是第二排)
任何干净的方式来做到这一点?
感谢
如果你的意思是行偏移:行的秩与order by field2 DESC
具有field1 = 'etc'
排序后的结果,那么你可以这样做:
SET @rowRank = 0;
SELECT Sub.rowRank
FROM
(
SELECT *, (@rowRank := @rowRank + 1) as rowRank
FROM TableName
ORDER BY field2 DESC
) AS Sub
WHERE Sub.field1 = 'etc'
这应返回2.
就是这样的表达式'select *,any' valid? – triclosan 2012-02-29 15:09:18
@triclosan,是的,它是有效的。 – 2012-02-29 15:22:13
select count(*)
from table
where field2 > {field2 of the row to search the offset for, in this case, 10};
怎么这样呢?
SELECT COUNT(*) FROM table outer
WHERE field1 != 'etc'
AND field2 <= (SELECT MAX(inner.field2)
FROM table inner
WHERE inner.field1 = outer.field1)
您是否想按某个度量标准对行进行排名,然后返回某些行的排名?准确地说是 – 2012-02-29 14:58:29
。对不起,但我的英语是一个不好的野兽。 – cedivad 2012-02-29 14:59:26
所以'SELECT offset()FROM table WHERE field1 ='abc'ORDER BY field2 DESC' should return 0 and field1 ='efg'should return 1? – 2012-02-29 15:00:26