【问题标题】:SQL: not a single group function .... not a GROUP BY expression [duplicate]SQL:不是单个组函数....不是 GROUP BY 表达式 [重复]
【发布时间】:2013-04-11 21:31:56
【问题描述】:

我有许多表格,详细说明了商店的客户和销售情况等。

我想找到最低售价;即 SQL 表达式返回的单个结果。

为了使结果有意义,我还想将 customer_sale 表与 customer 表连接起来(这样相关客户也将返回他/她的姓名)。

使用以下代码

SELECT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, MIN(SALE_PRICE)
FROM CUST_ORDER
INNER JOIN CUSTOMER
ON CUST_ORDER.CUST_ID = CUSTOMER.CUST_ID
GROUP BY CUST_ORDER.CUST_ID
HAVING MIN(SALE_PRICE) = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER GROUP BY CUST_ID)

在 Oracle 11g 中抛出以下错误:

第 1 行出现错误:ORA-00979:不是 GROUP BY 表达式

这很有意义,因为它只返回一个结果。

但是删除 GROUP BY 子句会导致 dbms 抛出以下错误:

SELECT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, MIN(SALE_PRICE)
FROM CUST_ORDER
INNER JOIN CUSTOMER
ON CUST_ORDER.CUST_ID=CUSTOMER.CUST_ID
HAVING MIN(SALE_PRICE) = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER)

第 1 行出现错误:ORA-00937:不是单组组函数

是否需要做一些额外的嵌套才能使语句正确执行?

【问题讨论】:

    标签: sql oracle oracle11g aggregate-functions min


    【解决方案1】:

    在您的第一个查询中,您似乎需要另外 GROUP BY 客户的名字和姓氏,因为您还选择选择它们:

    SELECT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, MIN(SALE_PRICE)
    FROM CUST_ORDER
    INNER JOIN CUSTOMER
    ON CUST_ORDER.CUST_ID = CUSTOMER.CUST_ID
    GROUP BY CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME
    HAVING MIN(SALE_PRICE) = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER)
    

    【讨论】:

    • 谢谢,但这会产生此错误“第 6 行错误:ORA-01427:单行子查询返回多行”:P
    • 我明白了...您需要从 SELECT MIN(SALE_PRICE) FROM CUST_ORDER GROUP BY CUST_ID 中删除 group by。我会更新我的答案以反映这一点。
    • 这个最新版本看起来可能会起作用......总是让 OP 有选择!
    【解决方案2】:

    如果你真的只是得到整张桌子的最小值,也许就是这样:

    SELECT DISTINCT CUST_ORDER.CUST_ID, CUSTOMER.FNAME, CUSTOMER.LNAME, SALE_PRICE
    FROM CUST_ORDER
    INNER JOIN CUSTOMER
    ON CUST_ORDER.CUST_ID=CUSTOMER.CUST_ID
    WHERE SALE_PRICE = (SELECT MIN(SALE_PRICE) FROM CUST_ORDER)
    

    我不确定您是否需要DISTINCT,或者您的数据看起来如何。

    【讨论】:

    • 似乎很有效!
    猜你喜欢
    • 2012-10-03
    • 2014-12-28
    • 1970-01-01
    • 2011-08-14
    • 2013-03-29
    • 2012-12-07
    • 2011-06-29
    • 2017-09-21
    相关资源
    最近更新 更多