簡體   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