给出一个表
field1 | field2
abc | 1
efg | 30
etc | 10
我想运行SELECT offset() FROM table WHERE field1 = 'etc' ORDER BY field2 DESC
这样一个虚构的查询应该返回2
(按field2 desc
排序,field1 = etc
是第二行)
有什么干净的方法吗?
由于
答案 0 :(得分:1)
这样的事情怎么样?
SELECT COUNT(*) FROM table outer
WHERE field1 != 'etc'
AND field2 <= (SELECT MAX(inner.field2)
FROM table inner
WHERE inner.field1 = outer.field1)
答案 1 :(得分:1)
如果你的意思是行偏移:使用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.
答案 2 :(得分:0)
select count(*)
from table
where field2 > {field2 of the row to search the offset for, in this case, 10};