Bug in GROUP BY/CASE/MAX?

I'm seeing a strange result when I group rows and using CASE and
MAX() to select the column I'm interested in (typical pivot-table
operation).  Here's my sample case:

mysql> -- create table
mysql> create table t (row int not null,
                       col int not null,
                       val varchar(255) not null);

mysql> -- populate with test records
mysql> insert into t values (1,1,'orange');
mysql> insert into t values (1,2,'large');
mysql> insert into t values (2,1,'yellow');
mysql> insert into t values (2,2,'medium');
mysql> insert into t values (3,1,'green');
mysql> insert into t values (3,2,'small');

mysql> -- group by row, extract values where col=1
mysql> select max(case when col = 1 then val else null end) as color
       from t group by row;

MySQL shows the result set as:

+--------+
| color  |
+--------+
| orange |
| NULL   |
| NULL   |
+--------+
3 rows in set (0.00 sec)

I would have expected MySQL to group the records into
three sets according to row:
  (1,1,'orange')
  (1,2,'large')

  (2,1,'yellow')
  (2,2,'medium')

  (3,1,'green')
  (3,2,'small')

then, for each set, apply the case expression:
  (1,1,'orange')  becomes   'orange'
  (1,2,'large')   becomes   NULL

  (2,1,'yellow')  becomes   'yellow'
  (2,2,'medium')  becomes   NULL

  (3,1,'green')   becomes   'green'
  (3,2,'small')   becomes   NULL

then, apply the max() aggregate:
  max('orange',NULL)   becomes  'orange'
  max('yellow',NULL)   becomes  'yellow'
  max('green',NULL)    becomes  'green'

So, I'm expecting to see a result set of three colors. This query
works as I expect in MS-SQLServer 7.0.  Why doesn't it work the same
way in MySQL?

I'm running the RPMS from MySQL.com for MySQL-max 3.23.52
on RedHat 7.3.

tia,

Bob Diss, [EMAIL PROTECTED]

---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to