> Where is the implicit group?  The 'order by'
> shouldn't effect how things
> are grouped.  On MySQL 4.0.17:

Wow.  I wasn't aware.  Is that expected behavior? 
Other databases (Oracle) generate an error when you
include columns in the select list that aren't in a
group by, or they do an implicit group by (postgres)
on the columns.  I [wrongly] assumed an implicit group
by was going on because the query hadn't generated an
error.

I guess mysql just takes the values from the first
record that matches the group expression.

That creates confusion when you do:
select first,last,email, count(*)
from foobar
group by email

Because the query will report a count of two (given
your data) when there really is only one row with that
first,last,email combination.

Oracle would require you to do:
select first,last,email, count(*)
from foobar
group by first,last,email
otherwise you would get an error that "first is not a
GROUP BY expression".

That query would return four rows on your data, each
with a count of 1.

My apologies,

Justin

> 
> create table bar ( email varchar(64), first
> varchar(64), last
> varchar(64) );
> 
> insert into bar values ('[EMAIL PROTECTED]', 'a', 'smith'),
> ('[EMAIL PROTECTED]', 'a',
> 'williams'), ('[EMAIL PROTECTED]', 'b', 'webb'), ('[EMAIL PROTECTED]',
> 'c', 'oconner');
> 
> mysql> select * from bar;
> +---------+-------+----------+
> | email   | first | last     |
> +---------+-------+----------+
> | [EMAIL PROTECTED] | a     | smith    |
> | [EMAIL PROTECTED] | a     | williams |
> | [EMAIL PROTECTED] | b     | webb     |
> | [EMAIL PROTECTED] | c     | oconner  |
> +---------+-------+----------+
> 
> mysql> select first,last,email from bar b group by
> b.email order by
> b.first, b.last;
> +-------+-------+---------+
> | first | last  | email   |
> +-------+-------+---------+
> | a     | smith | [EMAIL PROTECTED] |
> | b     | webb  | [EMAIL PROTECTED] |
> +-------+-------+---------+
> 
> 
> > Case differences between the records could also
> cause
> > dupes.  If case differences are causing it then do
> > 
> > select lower(first), lower(last), lower(email)
> > ...
> > group by lower(first), lower(last), lower(email)
> 
> Case or extra whitespace is a definite possibility. 
> Aaron, try to find
> at least one occurrence of duplicate email addresses
> and then post a
> small (5 row) dataset that exhibits the problem you
> are having.
> 
> Garth
> 
> > --- Wesley Furgiuele <[EMAIL PROTECTED]> wrote:
> > > What type of field is the email field?
> > > 
> > > Wes
> > > 
> > > On Jul 13, 2004, at 11:04 AM, Aaron Wolski
> wrote:
> > > 
> > > > Hey all,
> > > >
> > > > Got this query:
> > > >
> > > > SELECT first,last,email FROM CustomerTable AS
> t1,
> > > > OrderTable AS t2, CartTable AS t3 WHERE
> > > t2.cart_id=t3.cart_id
> > > > AND t1.id=t2.customer_index AND
> t3.submitted='1'
> > > AND
> > > > t3.product_index='1' AND t3.quantity>0
> > > > GROUP BY t1.email ORDER BY t1.first,t1.last
> > > >
> > > > For some strange reason it doesn't seem to
> group
> > > the email addresses.
> > > > I'd be hard pressed to find every occurrence
> out
> > > of 1000 records, but I
> > > > DID quickly spot two exact same records which
> > > means the email address
> > > > was not grouped.
> > > >
> > > > What can I do or where did I go wrong?
> > > >
> > > > Thanks!
> > > >
> > > > Aaron
> > > 
> > > 
> > > -- 
> > > MySQL General Mailing List
> > > For list archives: http://lists.mysql.com/mysql
> > > To unsubscribe:   
> > >
> >
>
http://lists.mysql.com/[EMAIL PROTECTED]
> > > 
> > > 
> -- 
> . Garth Webb
> . [EMAIL PROTECTED]
> .
> . shoes * 鞋子 * schoenen * 단화 * chaussures *
> zapatos
> . Schuhe * παπούτσια * pattini * 靴 *
> sapatas * ботинки
> 
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:   
>
http://lists.mysql.com/[EMAIL PROTECTED]
> 
> 


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to