mysql 如何使用 where 子句获取行位置
mysql how to get row position with where clause
我有这样的数据
id userid phone
1 1000 11111
2 1001 22222
3 1000 33333
4 1000 44444
5 1001 55555
6 1000 66666
第 phone 列是唯一的
我期待以下结果
position phone
3 44444
我尝试了 row_number 但它不起作用。
select *,row_number() over
(partition by userid order by id asc) as position
from table
where phone=44444
这样位置总是1
row_number()
根据 WHERE
子句应用于结果集。由于您在该结果中只有一条记录,因此 row_number()
是 1
.
首先需要select全集,对其应用row_number()
,然后得到搜索到的编号
的记录
SELECT position,
phone
FROM (SELECT row_number() OVER (PARTITION BY userid
ORDER BY id ASC) AS position,
phone
FROM elbat) AS x
WHERE phone = 44444;
如果 table 很大,将派生 table 的结果限制为具有搜索号码的用户的记录可能会有所帮助。 (phone, userid)
上的索引和 (userid, id, phone)
上的另一个索引可能支持这一点。
SELECT position,
phone
FROM (SELECT row_number() OVER (ORDER BY id ASC) AS position,
phone
FROM elbat
WHERE userid = (SELECT userid
FROM elbat
WHERE phone = 44444)) AS x
WHERE phone = 44444;
我有这样的数据
id userid phone
1 1000 11111
2 1001 22222
3 1000 33333
4 1000 44444
5 1001 55555
6 1000 66666
第 phone 列是唯一的
我期待以下结果
position phone
3 44444
我尝试了 row_number 但它不起作用。
select *,row_number() over
(partition by userid order by id asc) as position
from table
where phone=44444
这样位置总是1
row_number()
根据 WHERE
子句应用于结果集。由于您在该结果中只有一条记录,因此 row_number()
是 1
.
首先需要select全集,对其应用row_number()
,然后得到搜索到的编号
SELECT position,
phone
FROM (SELECT row_number() OVER (PARTITION BY userid
ORDER BY id ASC) AS position,
phone
FROM elbat) AS x
WHERE phone = 44444;
如果 table 很大,将派生 table 的结果限制为具有搜索号码的用户的记录可能会有所帮助。 (phone, userid)
上的索引和 (userid, id, phone)
上的另一个索引可能支持这一点。
SELECT position,
phone
FROM (SELECT row_number() OVER (ORDER BY id ASC) AS position,
phone
FROM elbat
WHERE userid = (SELECT userid
FROM elbat
WHERE phone = 44444)) AS x
WHERE phone = 44444;