MySQL 返回特定答案上方和下方的行

标签 mysql phpmyadmin

我有一个简单数据表,其中包含三列: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/

相关文章:

php - “PDOException”语法错误或访问冲突 : 1064 You have an error in your SQL syntax; check

php - 在社交网络系统中处理 mysql 连接的最佳实践

mysql - 在 CentOS 7 (x64) 中通过 bash shell 脚本安装 MySQL Community Server 5.7

php - HTML/PHP 从下拉菜单中选择一个值并检索关联的行并输出该行的所有数据

mysql - phpmyadmin 不允许我添加外键关系

mysql - 单排多排

python - Flask_mysql 给出错误 "ExtDeprecationWarning: Detected extension named flaskext.mysql please rename it to flask_mysql."

时间戳中的 MySQL 错误

php - 计算选择框值

php - 无法打开phpmyadmin目录: Call to undefined function