Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用“选择”按钮选择位置?_Mysql_Sql_Database_Select - Fatal编程技术网

Mysql 用“选择”按钮选择位置?

Mysql 用“选择”按钮选择位置?,mysql,sql,database,select,Mysql,Sql,Database,Select,我有一个查询,发现所有未清余额不等于0的人。我认为这一切都是好的,但扩大了可用的样本数据后,我发现它并不完全存在,我想不远 代码如下: SELECT bookingRef, leadname, departureDate, balanceDueDate, totalDue, totalReceived, (totalDue - totalReceived) AS outstandingBalance, (SELECT SUM(CASE WHEN(totalDue

我有一个查询,发现所有未清余额不等于0的人。我认为这一切都是好的,但扩大了可用的样本数据后,我发现它并不完全存在,我想不远

代码如下:

    SELECT bookingRef, leadname, departureDate, balanceDueDate,
      totalDue, totalReceived, (totalDue - totalReceived) AS outstandingBalance,
      (SELECT SUM(CASE WHEN(totalDue - totalReceived) <> 0 THEN 1 ELSE 0 END)
       FROM bookings) AS numberOutstanding,
      (SELECT SUM(totalDue) FROM bookings) AS grossDue,
      (SELECT SUM(totalReceived) FROM bookings) AS grossReceived,
      (SELECT SUM(totalDue - totalReceived) FROM bookings) AS grossOutstanding
    FROM bookings
    WHERE (amendedDate BETWEEN '2015-09-30' AND '2016-09-30')
    HAVING outstandingBalance <> 0;
发生的情况是,当日期在整个范围内时,结果是正确的。但是,当只执行上述一年时,它仍然对总范围进行求和,忽略求和的where子句

我想我需要将where子句添加到每个sum select中,但仍会遇到运行错误

我将如何实现这一点

非常感谢

注意:使用MySQL 8-10年而不使用它时非常生锈。

没有MySQL窗口功能的解决方案 不幸的是,MySQL不支持窗口函数,这将使此查询更加方便。相反,您可以在案例中使用交叉联接。不过,由于MySQL也不支持公共表表达式,您将无法避免两次应用谓词:

SELECT b.bookingRef, b.leadname, b.departureDate, b.balanceDueDate,
  b.totalDue, b.totalReceived, (b.totalDue - b.totalReceived) AS outstandingBalance, a.*
FROM bookings b,
CROSS JOIN (
  SELECT 
    SUM(CASE WHEN(totalDue - totalReceived) <> 0 THEN 1 ELSE 0 END AS numberOutstanding,
    SUM(totalDue) AS grossDue,
    SUM(totalREceived) AS grossReceived,
    SUM(totalDue - totalReceived) AS grossOutstanding
  FROM bookings
  WHERE (amendedDate BETWEEN '2015-09-30' AND '2016-09-30')
  AND (totalDue - totalReceived) <> 0
) a
WHERE (b.amendedDate BETWEEN '2015-09-30' AND '2016-09-30')
AND (b.totalDue - b.totalReceived) <> 0;
关于拥有的旁注
我怀疑您使用HAVING子句是为了能够重新使用SELECT子句中的列名。这是非常特定于MySQL的,可能并不完全符合您的意图。HAVING在GROUP BY之后应用,因此在聚合之后应用。在您的查询中,您并不真正需要GROUP BY子句,因此我将避免使用HAVE

非常感谢,阻止我拔头发。
SELECT bookingRef, leadname, departureDate, balanceDueDate,
  totalDue, totalReceived, (totalDue - totalReceived) AS outstandingBalance,
  SUM(CASE WHEN(totalDue - totalReceived) <> 0 THEN 1 ELSE 0 END) OVER() AS numberOutstanding,
  SUM(totalDue) OVER() AS grossDue,
  SUM(totalReceived) OVER() AS grossReceived,
  SUM(totalDue - totalReceived) OVER() AS grossOutstanding
FROM bookings
WHERE (amendedDate BETWEEN '2015-09-30' AND '2016-09-30')
AND (b.totalDue - b.totalReceived) <> 0;