給定一個表的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