Как создать используемый псевдоним в подзапросе MySQL SUM - PullRequest
0 голосов
/ 15 января 2019

В следующем запросе 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, чтобы продолжить решение.

Вот результат запроса: enter image description here

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Псевдоним должен быть во внешнем запросе , а не во внутреннем запросе :

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;
0 голосов
/ 15 января 2019

Вместо псевдонима внутри подзапроса, псевдоним его результата:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...