Sql 选择不同粒度级别的数据(Oracle中的分组集)
我需要选择不同粒度级别的数据(在Oracle中)。我有一个表,数据如下:Sql 选择不同粒度级别的数据(Oracle中的分组集),sql,oracle,Sql,Oracle,我需要选择不同粒度级别的数据(在Oracle中)。我有一个表,数据如下: c1 c2 c3 c4 a a1 10 5 a a2 10 5 b b1 10 5 b b2 10 5 我需要编写一个查询,返回如下数据: c1 c2 c3 a 20 10 --aggregated data a1 10 5 --lowest granular level data a2 10 5 --lowest granular level da
c1 c2 c3 c4
a a1 10 5
a a2 10 5
b b1 10 5
b b2 10 5
我需要编写一个查询,返回如下数据:
c1 c2 c3
a 20 10 --aggregated data
a1 10 5 --lowest granular level data
a2 10 5 --lowest granular level data
b 20 10
b1 10 5 -- data of b1, b2 should follow the data of b; likewise a1, a2 should follow data of a
b2 10 5
我发现这很不寻常,因为我需要选择最低粒度级别和聚合级别的数据。我该怎么做呢?很难确定,因为您没有告诉我们如何从一个数据集到另一个数据集。不过我猜你想要的是
SELECT c1, sum(c3) c2, sum(c4) c3
FROM table_name
GROUP BY c1
UNION ALL
SELECT c2, sum(c3), sum(c4)
FROM table_name
GROUP BY c2;
很难确定,因为您没有告诉我们如何从一个数据集到另一个数据集。不过我猜你想要的是
SELECT c1, sum(c3) c2, sum(c4) c3
FROM table_name
GROUP BY c1
UNION ALL
SELECT c2, sum(c3), sum(c4)
FROM table_name
GROUP BY c2;
您可以从以下内容开始:
SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by rollup(c1,c2)
只获取您需要的组
SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by GROUPING SETS ( (c1, c2), c1)
请参阅其他示例和说明。您可以从以下内容开始:
SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by rollup(c1,c2)
只获取您需要的组
SELECT C1, C2, sum(c3), sum(c4), grouping_id(c1, c2)
FROM table_name
group by GROUPING SETS ( (c1, c2), c1)
请参阅其他示例和说明。我看不到新订单的任何逻辑…您是否尝试过在Oracle中使用CONNECT BY运算符。不确定使用方法,但听说它很有用,因为结果包含层次结构。我看不出新订单的任何逻辑…您是否尝试过在Oracle中使用CONNECT BY运算符。不确定用法,但听说它很有用,虽然结果包含层次结构。你有我的问题,但我需要保留顺序。由于“a1”、“a2”属于“a”类,a1、a2的数据应继承“a”类的数据,b1、b2的数据应继承“b”类的数据,依此类推。@chemicalkt-您是否保证数据将按照样本数据的字母顺序排序?如果没有,如何知道是先返回
a
行还是先返回b
行?a或b行可以按任何顺序返回,但a1、a2应在a之后返回,b1、b2应在b之后返回。您有我的问题,但我需要保留顺序。由于“a1”、“a2”属于“a”类,a1、a2的数据应继承“a”类的数据,b1、b2的数据应继承“b”类的数据,依此类推。@chemicalkt-您是否保证数据将按照样本数据的字母顺序排序?如果没有,你怎么知道是先返回a
行还是先返回b
行?a或b行可以按任何顺序返回,但a1、a2应该在a之后返回,b1、b2应该在b之后返回。你完全明白我的问题。但我正在尝试选择c1或c2,因为我需要选择c2作为最低级别的数据,选择c1作为聚合数据。我说过这是一个开始。您可以选择nvl(c2、c1)、sum(c3)、sum(c4)
我在订购数据时遇到问题。使用c1 asc的顺序,分组(c2)desc
以a
a2
a1
b
b2
b1
的顺序给出数据。按c1 asc使用顺序时,分组(c2)asc
按a1
a2
a
b1
b2
b
b
.a2和a1具有相同的分组。添加列c2:按c1 asc排序,分组(c2)说明,c2 asc
您正好遇到了我的问题。但我正在尝试选择c1或c2,因为我需要选择c2作为最低级别的数据,选择c1作为聚合数据。我说过这是一个开始。您可以选择nvl(c2、c1)、sum(c3)、sum(c4)
我在订购数据时遇到问题。使用c1 asc的顺序,分组(c2)desc
以a
a2
a1
b
b2
b1
的顺序给出数据。按c1 asc使用顺序时,分组(c2)asc
按a1
a2
a
b1
b2
b
b
.a2和a1具有相同的分组。添加列c2:按c1 asc排序,分组(c2)说明,c2 asc