![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
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? |
#3
| |||
| |||
|
|
"The Magnet" <a... (AT) unsu (DOT) com> a écrit dans le message de news: d34c6b28-c9b1-4bb8-b973-94aece1cc... (AT) y21g2000vba (DOT) 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 |
#4
| |||
| |||
|
|
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 ORDERBY 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? |
#5
| |||
| |||
|
|
On May 17, 5:01*pm, The Magnet <a... (AT) unsu (DOT) com> wrote: 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? I think i don't get it. Why not: CAR... (AT) XE (DOT) bequeath> select * from tags; * * TAG_ID TAG_NAME ---------- ---------- * * * * *1 TAG 1 * * * * *2 TAG 2 * * * * *3 TAG 3 CAR... (AT) XE (DOT) bequeath> select * from article_tags; ARTICLE_ID ARTICLE_NAME * * TAG_ID ---------- ------------ ---------- * * * * *1 ARTICLE 11 * * * * * *1 * * * * *1 ARTICLE 11 * * * * * *1 * * * * *1 ARTICLE 12 * * * * * *1 * * * * *2 ARTICLE 21 * * * * * *2 CAR... (AT) XE (DOT) bequeath> SELECT t.tag_id, * 2 * * * * t.tag_name, * 3 * * * * COUNT(a.tag_id) tag_count * 4 * *FROM article_tags a, * 5 * * * * tags t * 6 * WHERE t.tag_id = a.tag_id(+) * 7 * group by t.tag_id, t.tag_name; * * TAG_ID TAG_NAME * *TAG_COUNT ---------- ---------- ---------- * * * * *3 TAG 3 * * * * * * * 0 * * * * *1 TAG 1 * * * * * * * 3 * * * * *2 TAG 2 * * * * * * * 1 HTH. Cheers. Carlos. |
#6
| |||
| |||
|
|
"The Magnet" <a... (AT) unsu (DOT) com> a écrit dans le message de news: d34c6b28-c9b1-4bb8-b973-94aece1cc... (AT) y21g2000vba (DOT) 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 |
#7
| |||
| |||
|
|
Ok, maybe using all those analytical functions was not necessary here. *although I love them. Thanks. |
![]() |
| Thread Tools | |
| Display Modes | |
| |