我有一个简单数据表,其中包含三列:ID、人员姓名和相关销售数字。我不知道如何在按销售数据排名时返回上面和下面的行。
id | Name | Sales
---|------|------
0 | Tim | 9
1 | Jim | 5
2 | Joe | 3
3 | Ryan | 6
4 | Phil | 7
5 | James| 1
例如,用户 Ryan 的总销售额为 6。我如何返回低于他[Ryan] 的有 5 销售额的 Jim,然后返回高于他[Ryan] 的 Phil 7。我已经尝试过一些查询,甚至将其分成两部分。通过查询,如果输出这样的结果:
id | Name | Sales
---|------|------
4 | Phil | 7
3 | Ryan | 6
1 | Jim | 5
select * from SalesFigures where id >= '3' LIMIT 2 ORDER BY Sales ASC
这个错误,理论上只会返回查询的行及其下面的行。
如何实现这一结果?因为我似乎无法按销售数字订购。
谢谢。
最佳答案
我会使用这样的东西:
SELECT SalesFigures.*
FROM
SalesFigures INNER JOIN (
SELECT s1.Sales v1, MAX(s2.Sales) v2, MIN(s3.Sales) v3
FROM
SalesFigures s1 LEFT JOIN SalesFigures s2
ON s1.Sales > s2.Sales
LEFT JOIN SalesFigures s3
ON s1.Sales < s3.Sales
WHERE
s1.ID =3) m ON SalesFigures.Sales IN (m.v1, m.v2, m.v3)
使用 UNION 查询将如下所示:
SELECT SalesFigures.*
FROM SalesFigures WHERE ID=3
UNION ALL
(SELECT SalesFigures.*
FROM SalesFigures INNER JOIN SalesFigures s
ON SalesFigures.Sales < s.Sales
WHERE s.ID = 3
ORDER BY SalesFigures.Sales DESC LIMIT 1)
UNION ALL
(SELECT SalesFigures.*
FROM SalesFigures INNER JOIN SalesFigures s
ON SalesFigures.Sales > s.Sales
WHERE s.ID = 3
ORDER BY SalesFigures.Sales LIMIT 1)
虽然这适用于示例数据,但如果有多行具有相同的 Sales 值,它将仅返回一行。
关于MySQL 返回特定答案上方和下方的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15994090/