Mysql 有关订单类型(购买/退货)的most订单的SQL查询?

Mysql 有关订单类型(购买/退货)的most订单的SQL查询?,mysql,sql,sql-order-by,sum,Mysql,Sql,Sql Order By,Sum,我的订单如下表所示: 订单:订单号、ISBN、数量、类型 ISBN:本书的代码, 数量:客户订购了多少本书, 类型:购买或退货 我的目标是找到最畅销的图书ISBN。 这意味着我必须找到这些书的销量,但是 还计算他们的回报 例如: 用ISBN 1010购买3本书, 使用ISBN 2020购买5本书, 使用ISBN 2020归还3本书 畅销书:ISBN:1010 我尝试使用此查询: "SELECT ISBN, SUM( quantity ) as sum FROM orders

我的订单如下表所示:

订单:订单号、ISBN、数量、类型

ISBN:本书的代码, 数量:客户订购了多少本书, 类型:购买或退货

我的目标是找到最畅销的图书ISBN。 这意味着我必须找到这些书的销量,但是 还计算他们的回报

例如: 用ISBN 1010购买3本书, 使用ISBN 2020购买5本书, 使用ISBN 2020归还3本书

畅销书:ISBN:1010

我尝试使用此查询:

"SELECT 
    ISBN, SUM( quantity ) as sum
FROM 
    orders
GROUP BY 
    ISBN
ORDER BY
    sum DESC"
但显然这是错误的


有什么好主意吗?

如果你把购买和回报相加,你应该区分它们。像这样的方法应该会奏效:

SELECT ISBN, SUM(CASE WHEN type = 'return' THEN -1 * quantity ELSE quantity END) as sum
FROM orders
GROUP BY ISBN
ORDER BY sum DESC
SELECT 
    ISBN, SUM( IF(type = 'buy', quantity, -quantity) ) as sum
FROM 
    orders
GROUP BY 
    ISBN
ORDER BY
    sum DESC

你要把买入和收益相加,你应该区分它们。像这样的方法应该会奏效:

SELECT 
    ISBN, SUM( IF(type = 'buy', quantity, -quantity) ) as sum
FROM 
    orders
GROUP BY 
    ISBN
ORDER BY
    sum DESC

我想问题可能出在你的别名上。这对我很有用:

SELECT ISBN, SUM(Qty)
FROM orders
GROUP BY ISBN
ORDER BY SUM(Qty)

如果您不想在您所做的事情中计算收益,您还应该包括一个类似WHERE type=buy的子句。

我认为问题可能在于您的别名。这对我很有用:

SELECT ISBN, SUM(Qty)
FROM orders
GROUP BY ISBN
ORDER BY SUM(Qty)

如果你不想计算你所做的事情的回报,你还应该包括一个类似WHERE type=buy的条款。

Nice!谢谢你,巴萨姆·梅哈尼!这很有效。我当时不知道case的用法观察到更好…它返回的数组中的订单在DESC上带有“sum”。但不只是最畅销的订单…如果有两本书的订单相同,我怎么知道,而只考虑第一行?很好!谢谢你,巴萨姆·梅哈尼!这很有效。我当时不知道case的用法观察到更好…它返回的数组中的订单在DESC上带有'sum',但不只是最畅销的订单…如果有两本书具有相同的金额,我怎么知道只考虑第一行?