甲骨文说不是一个表达的群体

时间:2013-04-25 06:21:19

标签: sql oracle

我是Oracle新手。

我在MySQL尝试了一个查询,但效果很好

select 
    segment1, description, organization_id
from
    apps.mtl_system_items_b
where
    organization_id IN (110 , 268, 448)
GROUP BY segment1
HAVING COUNT(DISTINCT organization_id) = 3

但在Oracle中,它表示not a group by expression。怎么了?

编辑: -

我想要这样的结果

organisation_id   segment1
110               306145244
268               306145244
448               306145244
110               444444444
268               444444444
448               444444444

3 个答案:

答案 0 :(得分:1)

您已在SELECT列表中取消了未分类的表达式。

MySQL允许它们(不指定它将返回多个可能的值中的哪一个),但Oracle不会。

根据定义,您的查询将仅返回包含3个不同组织的细分。那么你想回归哪些组织?

如果您只想返回细分,请使用:

SELECT  segment1
FROM    apps.mtl_system_items_b
WHERE   organization_id IN (110 , 268, 448)
GROUP BY
        segment1
HAVING  COUNT(DISTINCT organization_id) = 3

如果您想要包含属于三个组织的细分的所有项目,请使用此项:

SELECT  segment1, description, organization_id
FROM    (
        SELECT  i.*,
                COUNT(DISTINCT organization_id) OVER (PARTITION BY segment1) cnt
        FROM    apps.mtl_system_items_b
        WHERE   organization_id IN (110, 268, 448)
        )
WHERE   cnt = 3

答案 1 :(得分:0)

对不起快速回答

select 
segment1, description, organization_id from
apps.mtl_system_items_b where
organization_id IN (110 , 268, 448) 
GROUP BY segment1, description, organization_id 
HAVING COUNT(DISTINCT organization_id) =3

也许这个解释可以帮助您在GROUP BY

方面获得一些理解

可以在SQL SELECT语句中使用SQL GROUP BY子句来跨多个记录收集数据,并将结果分组为一列或多列。

SQL GROUP BY子句的语法是:

SELECT column1, column2, ... column_n, aggregate_function (expression)
FROM tables
WHERE predicates
GROUP BY column1, column2, ... column_n;

aggregate_function可以是SQL SUM函数,SQL COUNT函数,SQL MIN函数或SQL MAX函数等函数。

由于您拥有aggregate_function,因此您需要按显示或选择的每个字段进行分组。

请参阅下面的深度说明

  

http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj32654.html

答案 2 :(得分:0)

以下是查询在MySQL上运行的原因:MySQL Extensions to GROUP BY

Oracle和任何其他RDBMS中,这不会起作用,因为您需要明确列出group by子句中的所有非聚合列。要使其工作,请将其添加到GROUP BY子句

GROUP BY segment1, description, organization_id