David, thank you for confirming that I wasn't nuts with the original
query. It was a wee bit early for me and since the coffee hadn't
kicked in (and I was too lazy to re-read it) assumed I had misread the
original that the poster wrote.

Considering the number of times a day that i use the having clause one
would think that I would have confidence in my memory even before
breakfast.

On another quick note, I want to give a pat on the back to Mike. I
used his xml based method of concatenating rows into a single column
yesterday and got one of my developers thinking I was some sort of
magician. We old folks have to prove to the kids every now and then
that we actually do keep learning :-)

Rob



On Jun 25, 7:35 am, ddf <orat...@msn.com> wrote:
> On Jun 25, 12:49 am, "faizal mangattil`" <faizmangat...@gmail.com>
> wrote:
>
>
>
>
>
> > select column1, count(*) from table1 group by column1 having count(column1)
>
> > > 99;
> > On Wed, Jun 24, 2009 at 4:04 PM, Rob Wolfe <wolfe....@gmail.com> wrote:
>
> > > On Jun 24, 7:24 am, Pav <ksulta...@googlemail.com> wrote:
> > > > Hi
>
> > > > I was trying to run an sql statement as following
>
> > > > select column1, count(*) from table1 group by column1 where count
> > > > (column1) > 99;
>
> > > > This seems to be incorrect, and so I was wondering if anyone knew a
> > > > working alternative?
>
> > > for a group expression you use HAVING not WHERE
>
> > > so would be more like
>
> > > select column1, count(*)
> > > from table1
> > > group by column1
> > > having count(*) > 99
>
> > > I am presuming that you only want the rows where the count is > 99
>
> > > Rob- Hide quoted text -
>
> > - Show quoted text -
>
> The original statement had no typographical errors; if you're coding
> your count() against a specific column then do so througout the entire
> query:
>
> select column1, count(column1) from table1 group by column1 having
> count(column1) > 99;
>
> Your example is also missing the relatiohnal operator and defining
> condition (> 99) so your statement generates an error:
>
> SQL> select column1, count(*) from table1 group by column1 having count
> (column1)
>   2  /
> select column1, count(*) from table1 group by column1 having count
> (column1)
>
> *
> ERROR at line 1:
> ORA-00920: invalid relational operator
>
> SQL>
>
> Rob's original statement is correct and functions as expected:
>
> SQL> select column1, count(*)
>   2  from table1
>   3  group by column1
>   4  having count(*) > 99
>   5
> SQL>
> SQL> /
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          1        589
>          6        588
>         11        588
>         13        588
>          2        589
>         14        588
>          4        589
>          5        588
>          8        588
>          3        589
>          7        588
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          9        588
>         10        588
>         12        588
>         15        588
>         16        588
>          0        588
>
> 17 rows selected.
>
> SQL>
>
> Changing his 'count(*)' to 'count(column1)' makes no difference:
>
> SQL> select column1, count(*)
>   2  from table1
>   3  group by column1
>   4  having count(column1) > 99;
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          1        589
>          6        588
>         11        588
>         13        588
>          2        589
>         14        588
>          4        589
>          5        588
>          8        588
>          3        589
>          7        588
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          9        588
>         10        588
>         12        588
>         15        588
>         16        588
>          0        588
>
> 17 rows selected.
>
> SQL>
>
> Your statement is no more efficient, either:
>
> SQL> select column1, count(*)
>   2  from table1
>   3  group by column1
>   4  having count(column1) > 99;
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          1        589
>          6        588
>         11        588
>         13        588
>          2        589
>         14        588
>          4        589
>          5        588
>          8        588
>          3        589
>          7        588
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          9        588
>         10        588
>         12        588
>         15        588
>         16        588
>          0        588
>
> 17 rows selected.
>
> Execution Plan
> ----------------------------------------------------------
> Plan hash value: 2160075778
>
> ---------------------------------------------------------------------------­---
> | Id  | Operation           | Name   | Rows  | Bytes | Cost (%CPU)|
> Time     |
> ---------------------------------------------------------------------------­---
> |   0 | SELECT STATEMENT    |        | 10000 |   126K|     8  (13)|
> 00:00:01 |
> |*  1 |  FILTER             |        |       |       |
> |          |
> |   2 |   HASH GROUP BY     |        | 10000 |   126K|     8  (13)|
> 00:00:01 |
> |   3 |    TABLE ACCESS FULL| TABLE1 | 10000 |   126K|     7   (0)|
> 00:00:01 |
> ---------------------------------------------------------------------------­---
>
> Predicate Information (identified by operation id):
> ---------------------------------------------------
>
>    1 - filter(COUNT("COLUMN1")>99)
>
> Note
> -----
>    - dynamic sampling used for this statement
>
> Statistics
> ----------------------------------------------------------
>         264  recursive calls
>           0  db block gets
>          79  consistent gets
>           0  physical reads
>           0  redo size
>         785  bytes sent via SQL*Net to client
>         407  bytes received via SQL*Net from client
>           3  SQL*Net roundtrips to/from client
>           5  sorts (memory)
>           0  sorts (disk)
>          17  rows processed
>
> SQL>
> SQL> alter system flush shared_pool;
>
> System altered.
>
> SQL>
> SQL> select column1, count(*)
>   2  from table1
>   3  group by column1
>   4  having count(*) > 99 ;
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          1        589
>          6        588
>         11        588
>         13        588
>          2        589
>         14        588
>          4        589
>          5        588
>          8        588
>          3        589
>          7        588
>
>    COLUMN1   COUNT(*)
> ---------- ----------
>          9        588
>         10        588
>         12        588
>         15        588
>         16        588
>          0        588
>
> 17 rows selected.
>
> Execution Plan
> ----------------------------------------------------------
> Plan hash value: 2160075778
>
> ---------------------------------------------------------------------------­---
> | Id  | Operation           | Name   | Rows  | Bytes | Cost (%CPU)|
> Time     |
> ---------------------------------------------------------------------------­---
> |   0 | SELECT STATEMENT    |        | 10000 |   126K|     8  (13)|
> 00:00:01 |
> |*  1 |  FILTER             |        |       |       |
> |          |
> |   2 |   HASH GROUP BY     |        | 10000 |   126K|     8  (13)|
> 00:00:01 |
> |   3 |    TABLE ACCESS FULL| TABLE1 | 10000 |   126K|     7   (0)|
> 00:00:01 |
> ---------------------------------------------------------------------------­---
>
> Predicate Information (identified by operation id):
> ---------------------------------------------------
>
>    1 - filter(COUNT(*)>99)
>
> Note
> -----
>    - dynamic sampling used for this statement
>
> Statistics
> ----------------------------------------------------------
>         264  recursive calls
>           0  db block gets
>          79  consistent gets
>           0  physical reads
>           0  redo size
>         785  bytes sent via SQL*Net to client
>         407  bytes received via SQL*Net from client
>           3  SQL*Net roundtrips to/from client
>           5  sorts (memory)
>           0  sorts (disk)
>          17  rows processed
>
> SQL>
>
> I guess I don't understand why someone would post an incomplete
> statement as a 'correction' to a functioning query.
>
> David Fitzjarrell- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to