Values of generated column not appearing in table

Posted by msh210 on Stack Overflow See other posts from Stack Overflow or by msh210
Published on 2012-06-04T17:24:53Z Indexed on 2012/06/12 22:40 UTC
Read the original article Hit count: 218

Filed under:
|

I'm using mysql version 5.1.41-3ubuntu12.10 (Ubuntu).

mysql> show create table tt\G
*************************** 1. row ***************************
       Table: tt
Create Table: CREATE TABLE `tt` (
  `pz` int(8) DEFAULT NULL,
  `os` varchar(8) DEFAULT NULL,
  `uz` int(11) NOT NULL,
  `p` bigint(21) NOT NULL DEFAULT '0',
  `c` decimal(23,0) DEFAULT NULL,
  KEY `pz` (`pz`),
  KEY `uz` (`uz`),
  KEY `os` (`os`),
  KEY `pz_2` (`pz`,`uz`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> select pz,uz,pz*uz,
    -> if(pz*uz,1,.5),
    -> left(pz,2) pl,left(lpad(uz,5,0),2) ul,
    -> p from tt limit 10;
+-------+----+-------+----------------+--------+----+--------+
|   pz  | uz | pz*uz | if(pz*uz,1,.5) |   pl   | ul |    p   |
+-------+----+-------+----------------+--------+----+--------+
|  NULL |  0 |  NULL |            0.5 | NULL   | 00 |   4080 |
|  NULL |  0 |  NULL |            0.5 | NULL   | 00 | 323754 |
| 89101 |  0 |     0 |            0.5 | 89     | 00 |   6880 |
|     0 |  0 |     0 |            0.5 | 0      | 00 |  11591 |
| 89110 |  0 |     0 |            0.5 | 89     | 00 |     72 |
| 78247 |  0 |     0 |            0.5 | 78     | 00 |     27 |
| 90062 |  0 |     0 |            0.5 | 90     | 00 |      5 |
| 63107 |  0 |     0 |            0.5 | 63     | 00 |      4 |
|  NULL |  0 |  NULL |            0.5 | NULL   | 00 |  54561 |
| 94102 |  0 |     0 |            0.5 | 94     | 00 |  12499 |
+-------+----+-------+----------------+--------+----+--------+

So far so good. As you see, 0.5 appears as a value of if(pz*uz,1,.5). The problem is:

mysql> select os,
    -> if(pz*uz,left(pz,2)<=>left(lpad(uz,5,0),2),.5) uptwo,
    -> if(pz*uz,left(pz,3)<=>left(lpad(uz,5,0),3),.5) upthree,
    -> sum(p) p,sum(c) c
    -> from tt t
    -> group by os,uptwo,upthree order by null;

+----+-------+---------+---------+-------+
| os | uptwo | upthree |    p    |   c   |
+----+-------+---------+---------+-------+
| u  |     1 |       1 |   52852 |   318 |
| i  |     1 |       1 | 7046563 | 21716 |
| m  |     1 |       1 | 1252166 |  7337 |
| i  |     0 |       0 | 1830284 |  4033 |
| m  |     0 |       0 |  294612 |  1714 |
| i  |     1 |       0 |  911486 |  3560 |
| m  |     1 |       0 |  145182 |  1136 |
| u  |     0 |       0 |   12144 |    23 |
| u  |     1 |       0 |    1571 |     8 |
+----+-------+---------+---------+-------+

Although I group by uptwo, 0.5 doesn't appear in that column. What happened to the 0.5 values?


Edit: As noted in the comments to Todd Gibson's answer, I also tried it with
if(pz*uz,cast(left(pz,2)<=>left(lpad(uz,5,0),2) as decimal),.5) instead of
if(pz*uz,left(pz,2)<=>left(lpad(uz,5,0),2),.5), but it, too, didn't work.

© Stack Overflow or respective owner

Related posts about mysql

Related posts about mysql-5.1