mysql - 差而不是和 mysql

标签 mysql sql group-by aggregate-functions

我需要计算差值而不是总和,有什么办法可以做到这一点吗?如果存在子聚合函数,这里是所需的示例。

SELECT p.*,SUB(p.orders) AS diff FROM products AS p GROUP BY p.id HAVING p.orders<0;    

这只是示例,不是真实的表格,只是示例。这个想法是比较第一个值是否大于下一个值。真实的示例是,如果查询返回两行,则在一个查询中比较这两行的两个值(订单数)。
如果有任何帮助,我将不胜感激。

最佳答案

您想要的仅适用于始终有 2 行具有相同 p.id 和不同订单的情况。如果你有超过 2 行,你会从中减去哪一行?

因此,在特殊情况下,每个 p.id 总是有 2 行,那么您需要的不是组函数,而是将表产品与其自身连接起来,如下所示:

选择 p1.id, (p1.orders - p2.orders) 作为 diff 从产品 p1 内连接产品 p2 上的 p1.id = p2.id 其中 p1.orderid <> p2.orderid

仅当您的每种产品始终有 2 个不同的订单时,此功能才有效。

关于mysql - 差而不是和 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29042085/

相关文章:

php - 无法在 PHP 中查看数据库中的表

sql - 同步表 - UPDATE INSERT DELETE 的顺序重要吗?

ruby-on-rails - 如何按此哈希数组分组(可枚举)[Ruby、Rails]

r - 按多个组对特定行求和

sql - 如何使用 log4j 打印 SQL 查询结果日志?

linq - 获取每日计数时,如何使 LINQ 查询中显示零计数?

php - 为什么我的站点在 xampp 中运行但不在我的 Apache 服务器中运行,而我在 Ubuntu 上设置的 mySQL?

php - 使用Twilio的短信验证系统

mysql - 在 sp mysql 的 while 循环中插入 select 语句

MySQL 显示临时表;