我是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
答案 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