mysql - 这个查询在做什么?

标签 mysql sql database

我有以下表格:

PRODUCT ( ProdId, Name, Price, Weight, Category, Description, … )
DETAIL ( OrdId, ProdId, Qty, … )
ORDER ( OrdId, ClientId, Amount, OrdDate, DeliveryDate, ChosenStoreId, … )

我必须用简单的语言(即对非程序员)描述以下查询的作用:

select * from Order O
where Amount < 0.95 * ( select sum( Qty * Price ) from Product natural join Detail
where OrderId = O.OrderId )

我最初的 react 是它显示的是金额最低的订单,只有 5%,但它被标记为不正确。

我的另一个想法是它可能代表折扣,但是练习描述没有提到任何关于折扣的信息,所以我猜它也是不正确的。

谁能告诉我查询在做什么?提前致谢。

注意:除了表格,这是我查询的所有相关信息。

最佳答案

Re Gordon 我也不赞成自然连接。该查询似乎是故意隐晦的,尤其是因为没有示例数据。一个好的策略是用更通用的语法写出 SQL 并进行推断,见下文:

select o.OrdId,
       sum(o.Amount) Amount,
       sum(d.Qty * p.Price) QtyPrice

from Order as o
  left join Detail as d on d.OrdId = o.OrdId
  left join Product as p on p.ProdId = d.ProdId

group by o.OrdId

having sum(o.Amount) < (0.95 * sum(d.Qty * p.Price))

对我来说,这个查询返回

  1. 系统中的所有唯一订单
  2. 订单收取的金额低于预期金额的 95%。

如您所说,这可能是一个折扣跟踪器,或者 o.Amount 字段的填充独立于 DetailProduct表,这显示了任何错误。

关于mysql - 这个查询在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54446428/

相关文章:

MySQL:选择除列外仅具有唯一值的行

php - 查找下次营业时间; mysql小时计算

php - 使用 PHP 从 MYSQL 数据库格式化 DATETIME

sql - 如何在具有简单 4 列(sno、name、job、dept)的表上的 oracle 中创建死锁情况?

mysql - 我可以查询 MYSQL 的特定数据类型吗?

mysql - 无法删除或更新父行 : a foreign key constraint fails - MYSQL

有异常的 MySQL UPDATE 查询

sql - Azure SQL 数据库牺牲了 CAP 定理的哪一部分,为什么?

sql - 确定对每个项目执行的最后一个操作是安装还是删除

mysql - 外键有重复且没有主键