Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Re: Problem with simple histogram query
Hello,
Thank you very much for your reply, that works fine. (Still a problem, though, see below.) Using the old Oracle syntax (we're developing on 9, but also testing on 8) also works:
select count(sc.uniformity) as occurrences, cd.description
from sc2 sc, cd2 cd
where sc.uniformity(+) >= cd.minvalue
and sc.uniformity(+) < cd.maxvalue
group by cd.description;
But I'm still having a problem when extending this simple example to our "real" query, which involves two more tables with inner joins to the two tables that have a right outer join.
To illustrate, let me show some partial queries. The one below shows the dataset we will be counting, having 2 records:
select sc.sampleid, sc.uniformity
from scurve sc, sample s
where s.wellid in (101)
and sc.typeid = 1
and s.s_id = sc.sampleid and s.depth >= 1100 and s.depth <= 1200;
SAMPLEID UNIFORMITY
---------- ----------
181 2,639 182 3,533
Next, the categories to which they will be assigned, are:
select (cd.minvalue || ' to ' || cd.maxvalue) as interval, cd.description
from coeffdescription cd, coefftype ct
where ct.co_id = cd.coefftypeid
and ct.type = 'Uniformity'
order by cd.minvalue;
INTERVAL DESCRIPTION
---------------- --- 0 to 3 Uniform sand 3 to 5 Intermediate: 3<Uc<5 5 to 999999 Non-uniform sand
So, the resulting combined query should have counts 1 for the first and second category, but 0 for the third:
select count(sc.uniformity) as occurrences, (cd.minvalue || ' to ' || cd.maxvalue) as interval, cd.description from scurve sc, coeffdescription cd, coefftype ct, sample s where s.wellid in (101)
and sc.uniformity(+) >= cd.minvalue and sc.uniformity(+) < cd.maxvalue and sc.typeid = 1
OCCURRENCES INTERVAL DESCRIPTION
----------- ---------- ---
1 0 to 3 Uniform sand 1 3 to 5 Intermediate: 3<Uc<5
The problem is, there is no count for the third category (should have been count 0).
I also tried the newer syntax for the outer join, but with the same result (sorry about the mixed old and new syntax):
select count(sc.uniformity) as occurrences, (cd.minvalue || ' to ' ||
cd.maxvalue) as interval, cd.description
from scurve sc RIGHT OUTER JOIN coeffdescription cd ON
(sc.uniformity >= cd.minvalue
and sc.uniformity < cd.maxvalue), coefftype ct, sample s
where s.wellid in (101)
and s.s_id = sc.sampleid
and sc.typeid = 1 and ct.co_id = cd.coefftypeid and ct.type = 'Uniformity'
From what I can see, the joins must be:
Any hints on what is wrong would be appreciated! (Regarding syntax, it's sufficient that the solution works on Oracle 9).
Regards,
Knut
"Isaac Blank" <izblank_at_yahoo.com> wrote in message
news:EB9_a.145$Mp1.20900925_at_newssvr21.news.prodigy.com...
> select count(sc.uniformity) as occurrences, cd.description
> from sc2 sc RIGHT OUTER JOIN cd2 cd
> ON sc.uniformity >= cd.minvalue
> and sc.uniformity < cd.maxvalue
> group by cd.description
> >