[英]Oracle SQL: ROLLUP not summing correctly
Rollup seems to be working correcly to count the number of units, but not the number of trains. 汇总似乎在正确地计算单位数量,而不是火车数量。 Any idea what could be causing that?
知道是什么原因造成的吗?
The output from the query looks like this. 查询的输出如下所示。 The sum of the Units column in yellow is 53 but the rollup is showing 51. The number of units adds up correctly though...
黄色的“单位”列的总和为53,但是汇总显示为51。
alt text http://img522.imageshack.us/img522/9057/ss20100330111503.png 替代文字http://img522.imageshack.us/img522/9057/ss20100330111503.png
And here's the oracle SQL query... 这是oracle SQL查询...
select t.year,
t.week,
decode(t.mine_id,NULL,'PF',t.mine_id) as mine_id,
decode(t.product,Null,'LF',t.product) as product,
decode(t.mine_id||'-'||t.product,'-','PF',t.mine_id||'-'||t.product) as code,
count(distinct t.tpps_train_id) as trains,
count(1) as units
from
(
select trn.mine_code as mine_id,
trn.train_tpps_id as tpps_train_id,
round((con.calibrated_weight_total - con.empty_weight_total),2) as tonnes
from widsys.train trn
INNER JOIN widsys.consist con
USING (train_record_id)
where trn.direction = 'N'
and (con.calibrated_weight_total-con.empty_weight_total) > 10
and trn.num_cars > 10
and con.consist_no not like '_L%'
) w,
(
select to_char(td.datetime_act_comp_dump-7/24, 'IYYY') as year,
to_char(td.datetime_act_comp_dump-7/24, 'IW') as week,
td.mine_code as mine_id,
td.train_id as tpps_train_id,
pt.product_type_code as product
from tpps.train_details td
inner join tpps.ore_products op
using (ore_product_key)
inner join tpps.product_types pt
using (product_type_key)
where to_char(td.datetime_act_comp_dump-7/24, 'IYYY') = 2010
and to_char(td.datetime_act_comp_dump-7/24, 'IW') = 12
order by td.datetime_act_comp_dump asc
) t
where w.mine_id = t.mine_id
and w.tpps_train_id = t.tpps_train_id
having t.product is not null or t.mine_id is null
group by
t.year,
t.week,
rollup(
t.mine_id,
t.product)
I think it is the DISTINCT. 我认为这是DISTINCT。 You are getting the total number of DISTINCT values, not the sum of the count of distinct values for each record.
您得到的是DISTINCT值的总数,而不是每条记录的不同值的总数。
select nvl(owner,'-') owner, count(distinct object_type) c1, count(*) c2
from all_objects
where owner in ('MDSYS','CTXSYS')
group by rollup(owner)
gives 给
OWNER C1 C2
CTXSYS 6 82
MDSYS 11 653
- 11 735
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.