From: Michel Cadot on

"The Magnet" <art(a)unsu.com> a �crit dans le message de news: cc1222a8-dd9e-440d-ab5c-c0d16795ec69(a)m33g2000vbi.googlegroups.com...
On May 17, 10:09 am, "Michel Cadot" <micadot{at}altern{dot}org> wrote:
> "The Magnet" <a...(a)unsu.com> a �crit dans le message de news: d34c6b28-c9b1-4bb8-b973-94aece1cc...(a)y21g2000vba.googlegroups.com...
> | Hi,
> |
> | I'm tryng to use the Analytical function COUNT(*):
> |
> | SELECT tag_id, tag_name, tag_count
> | FROM (SELECT t.tag_id, tag_name,
> | COUNT(*) OVER (PARTITION BY t.tag_id) tag_count,
> | ROW_NUMBER() OVER (PARTITION BY t.tag_id ORDER BY
> | t.tag_id) rnum
> | FROM commentary.article_tags a, commentary.tags t
> | WHERE t.tag_id = a.tag_id(+))
> | WHERE rnum = 1;
> |
> | Problem I am having is that for records in the TAGS table which do not
> | match in the ARTICLE_TAGS table are still being returned with 1 row.
> | I'm looking for it to return 0, as there were no matches.
> |
> | Thought it was the way the join was working, but I do not think so as
> | I've tried different combos.
> |
> | Any ideas?
>
> Do not count after the outer join because you will have of course at least
> one row, count inside the outer joined table and nvl to 0.
>
> Regards
> Michel


Not sure what you mean "after" the outer join. I thought I was
already counting within.

------------------------------------------------


Not:
SQL> select deptno, dname, cnt
2 from ( select d.deptno, d.dname,
3 count(*) over (partition by d.deptno) cnt,
4 row_number () over (partition by d.deptno order by e.ename) rn
5 from dept d, emp e
6 where e.deptno (+) = d.deptno
7 )
8 where rn = 1
9 /
DEPTNO DNAME CNT
---------- -------------- ----------
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6
40 OPERATIONS 1

4 rows selected.

But:

SQL> select d.deptno, d.dname, nvl(e.cnt,0) cnt
2 from dept d,
3 (select deptno, count(*) cnt from emp group by deptno) e
4 where e.deptno (+) = d.deptno
5 /
DEPTNO DNAME CNT
---------- -------------- ----------
10 ACCOUNTING 3
20 RESEARCH 5
30 SALES 6
40 OPERATIONS 0

4 rows selected.

General note: using an analytic function and then restrict to 1 row
with "distinct" or "row_number" is a sign that you misuse the function
and you acutally want to use an aggregate (as I did).

Regards
Michel


From: Carlos on
>
> Ok, maybe using all those analytical functions was not necessary
> here.  although I love them.
>
> Thanks.

I love my electric screwdriver, but I wouldn't use it to sink a nail
into the wall.

Cheers.

Carlos.