Mysql 试图将查询放入phpMyAdmin中的另一个查询中

Mysql 试图将查询放入phpMyAdmin中的另一个查询中,mysql,phpmyadmin,Mysql,Phpmyadmin,我试图使用一个查询作为另一个查询的数据源,但我一直从SELECT中得到一个解析错误。我对SQL和phpmyadmin相当陌生,不知道为什么会发生此错误。以下是我的问题,我正试图做到: SELECT CUS_CODE, COUNT(LINE.INV_NUMBER) AS "Number of Invoices", AVG("Invoice Total") AS "Average Invoice Amount", MAX("Invoice Total") AS "Max Invoice

我试图使用一个查询作为另一个查询的数据源,但我一直从SELECT中得到一个解析错误。我对SQL和phpmyadmin相当陌生,不知道为什么会发生此错误。以下是我的问题,我正试图做到:

SELECT  CUS_CODE, 
 COUNT(LINE.INV_NUMBER) AS "Number of Invoices", 
 AVG("Invoice Total") AS "Average Invoice Amount", 
 MAX("Invoice Total") AS "Max Invoice Amount", 
 MIN("Invoice Total") AS "Min Invoice Amount", 
 Sum("Invoice Total") AS "Total Customer Purchases"
FROM    (SELECT CUS_CODE, LINE.INV_NUMBER AS INV_NUMBER,
        Sum(LINE.LINE_UNITS*LINE.LINE_PRICE) AS "Invoice Total"
        FROM    INVOICE, LINE 
        WHERE   INVOICE.INV_NUMBER = LINE.INV_NUMBER
        GROUP BY    CUS_CODE, LINE.INV_NUMBER)
GROUP BY    CUS_CODE;
如果我的问题不清楚,很抱歉,但我可以回答任何问题以帮助澄清。

您的问题:

SELECT CUS_CODE,
    COUNT(LINE.INV_NUMBER) AS "Number of Invoices",
    AVG("Invoice Total") AS "Average Invoice Amount",
    MAX("Invoice Total") AS "Max Invoice Amount",
    MIN("Invoice Total") AS "Min Invoice Amount",
    Sum("Invoice Total") AS "Total Customer Purchases"
FROM (
    SELECT CUS_CODE,
        LINE.INV_NUMBER,
        Sum(LINE.LINE_UNITS * LINE.LINE_PRICE) AS "Invoice Total"
    FROM INVOICE,
        LINE
    WHERE INVOICE.INV_NUMBER = LINE.INV_NUMBER
    GROUP BY CUS_CODE, INV_NUMBER
    )
GROUP BY CUS_CODE;
这里有几个问题:

  • 在外部查询中,您引用了
    LINE.INV\u NUMBER
    ,但
    LINE
    表在此上下文中不可用。您需要的是子查询的
    INV\u编号
  • 子查询缺少别名,因此无法在外部查询中引用它。这只会抛出一个没有别名的错误
  • 固定的:

    SELECT t1.CUS_CODE,
        COUNT(t1.INV_NUMBER) AS "Number of Invoices",
        AVG(t1."Invoice Total") AS "Average Invoice Amount",
        MAX(t1."Invoice Total") AS "Max Invoice Amount",
        MIN(t1."Invoice Total") AS "Min Invoice Amount",
        Sum(t1."Invoice Total") AS "Total Customer Purchases"
    FROM (
        SELECT CUS_CODE,
            LINE.INV_NUMBER AS INV_NUMBER,
            Sum(LINE.LINE_UNITS * LINE.LINE_PRICE) AS "Invoice Total"
        FROM INVOICE,
            LINE
        WHERE INVOICE.INV_NUMBER = LINE.INV_NUMBER
        GROUP BY CUS_CODE,
            LINE.INV_NUMBER
        ) as t1
    GROUP BY CUS_CODE;
    

    外部查询只能访问由子查询创建的派生表公开的字段。它没有访问数据库实际表的权限,比如说,
    LINE
    。除此之外,您还必须为派生表提供别名。@giorgosbetos以前如何为该表提供别名?我试图找到它,但找不到如何给它一个别名。
    。。。按CUS_代码、LINE.INV_NUMBER)分组为t…@GiorgosBetsos,因此我必须使用AS进行内部查询?它似乎仍然不起作用。SELECT仍有错误,但t1别名也有错误。请共享错误?我相信这里的语法是正确的,因此是特定于您的数据导致了问题,确切的错误消息将有助于排除故障。“先前解析的”警告消息来自phpmyadmin,另一个错误可能是来自mysql的错误,它更相关。它说在“t1”OK下找到了以前的别名。我只能假设它是子查询中库存编号的多余字段别名。我已经把它去掉了。