Re: Interesting query outcomes

Joe <[email protected]> Wed, 19 Aug 2020 17:10:06 -0700 (PDT)
Newsgroups comp.databases.mysql
Message-ID <[email protected]>
On Wednesday, August 19, 2020 at 5:23:21 PM UTC-5, J.O. Aho wrote:
> On 18/08/2020 22.33, Joe wrote: 
> > I have a MySQL table field sometimes with NULL or empty values when there is no data. When I wrote the following to count data in this field: 
> > 
> > select CASE WHEN (TNAM is NULL || TNAM='') THEN 'default' 
> > ELSE TNAM END, count(1) 
> > from ITEMS group by 1; 
> > 
> > I got: 
> > 
> > | default | 2929 | 
> > | default | 139 | 
> > | item A | 347 | 
> > | item B | 831 | 
> > .... 
> > -- why "default" repeats? I humble one is from "TNAM is NULL" and the other from "TNAM=''", and also thought they should have been combined with "group" function... Thoughts without actually update table to turn "empty" to NULL or vise versa?
> Maybe you should look at what values you have, try a "select distinct 
> select concat('"',TNAM,'"') from ITEMS", it could show that you have a 
> TNAM which begins with default which could hold an extra space 
> (depending on mysql version, the extra space could be treated differently). 
> 
> -- 
> 
> //Aho

I did:
mysql> select distinct (select concat('"',TNAM'"')) from ITEMS order by 1;
and here is output:
+-----------+
| NULL      |  
| ""        |  
+-----------+
among other values.  So 'group' treats NULL and "nothing" ('') as separate values - perhaps that's where the mystery is.
I already translated them both to "default"; now all I need to do is to combine the two "default"s.

Thanks all!
joe