繁体   English   中英

如何在 MySQL SUM 子查询中创建可用的别名

[英]How to create usable alias in MySQL SUM subquery

在以下 MySQL 查询中,我能够生成 Sum 值,但无法分配可用于在 PHP 页面中回显的值。

SELECT
    invoices.InvoiceNo AS Invoice,
    invoices.invDate AS DATE,
    invoices.invValue AS Amount,
    (
        SELECT SUM(invoices.invValue) AS GrandTotal
        FROM invoices
        WHERE invoices.fKey = 186 AND inv_openClosed = 0
    )
FROM invoices
WHERE invoices.fKey = 186 AND inv_openClosed = 0
ORDER BY Invoice DESC

测试显示结果,但“GrandTotal”的别名不起作用。 并且没有错误来自 MySQL 来寻求解决方案。

这是查询的结果: 在此处输入图片说明

别名需要在外部查询而不是内部查询中

SELECT i.InvoiceNo AS Invoice,
       i.invDate AS DATE,
       i.invValue AS Amount,
       (SELECT SUM(i2.invValue)
        FROM invoices i2
        WHERE i2.fKey = 186 AND i2.inv_openClosed = 0
       )  AS GrandTotal
FROM invoices i
WHERE i.fKey = 186 AND i.inv_openClosed = 0
ORDER BY i.Invoice DESC;

您会注意到我还包含了表别名和限定列名。 您也可以将其编写为相关子查询,因此您无需重复常量:

       (SELECT SUM(i2.invValue)
        FROM invoices i2
        WHERE i2.fKey = i.fKey AND i2.inv_openClosed = i.inv_openClosed
       )  AS GrandTotal

在 MySQL 8+ 中,您可以使用窗口函数:

SELECT i.InvoiceNo AS Invoice,
       i.invDate AS DATE,
       i.invValue AS Amount,
       SUM(i.invValue) OVER (PARTITION BY fKey, inv_openClosed) as GrandTotal
FROM invoices i
WHERE i.fKey = 186 AND i.inv_openClosed = 0
ORDER BY i.Invoice DESC;

不要在子查询中使用别名,而是将其结果别名为:

SELECT
    invoices.InvoiceNo AS Invoice,
    invoices.invDate AS DATE,
    invoices.invValue AS Amount,
    (
        SELECT SUM(invoices.invValue) 
        FROM invoices
        WHERE invoices.fKey = 186 AND inv_openClosed = 0
    ) AS GrandTotal
FROM invoices
WHERE invoices.fKey = 186 AND inv_openClosed = 0
ORDER BY Invoice DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM