使用SUM()和group by选择Mysql子选项

时间:2017-02-14 00:11:25

标签: mysql subquery

我正在尝试创建一个查询,该查询在需要SUM函数和group by的子查询中执行计算。我的查询返回错误“子查询返回超过1行”。基本上我试图为每个订单返回“到期”金额。如果订单总额大于付款表中total_collected(对于该order_id)的总和,则将有到期金额。这是查询:

(defproject … …
  :profiles {:dev {:resources ["src/test/resources"]
                   … …}
             … …}
  … …)

我不能在子选择中包含'p.order_id',因为它应该只包含一列。我理解为什么我收到错误,我只是不知道如何让sub select只在每个order_id基础上执行SUM。

2 个答案:

答案 0 :(得分:2)

在不改变结构的情况下,我认为子查询正在查看订单/付款表中的所有数据。我认为您需要对其进行过滤,以便仅查看相关的order_id。

(我还在订单总数周围添加了一个SUM,因为我很确定如果没有它会产生不同的错误。)

values-xxxhdpi

虽然,如果你调整它以使它使用连接而不是子查询,我认为你会获得更好的性能。像这样:

function questions() {
  var question = ["What's You name?", "What's your age?", "Do you like pizza?"];
  var randomQuestion = truth[Math.floor(idea.length * Math.random())];
  document.getElementById('outputQ').innerHTML = randomQuestion;
}

答案 1 :(得分:1)

您不需要子查询:

SELECT
  o.order_id,
  o.server,
  o.subtotal,
  o.discount,
  o.tax,
  o.total,
  o.total - ifnull(sum(p.total_collected),0) As Due
FROM orders AS o 
LEFT JOIN payments AS p ON o.order_id = p.order_id
WHERE ...
GROUP BY o.order_id