添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

最近在Mysql发现一个问题,当我们如果使用GROUP BY如果出现NULL值,MYSQL会怎样处理。而且如果我需要把每个NULL值都打印出来而不是分组,那该怎么办?

下面我们做个试验:

    CREATE TABLE IF NOT EXISTS A(id INT PRIMARY KEY AUTO_INCREMENT ,NAME VARCHAR(10)) ;  
    CREATE TABLE IF NOT EXISTS B(id INT PRIMARY KEY AUTO_INCREMENT ,NAME VARCHAR(10) ,aid INT NOT NULL) ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO A(NAME) VALUES('b') ;  
    INSERT INTO A(NAME) VALUES('b') ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO A(NAME) VALUES('b') ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO A(NAME) VALUES('b') ;  
    INSERT INTO A(NAME) VALUES('a') ;  
    INSERT INTO B(NAME ,aid) VALUES('d' , 3) ;  
    INSERT INTO B(NAME ,aid) VALUES('f' , 5) ;  
    INSERT INTO B(NAME ,aid) VALUES('f' , 6) ;  
    INSERT INTO B(NAME ,aid) VALUES('f' , 7) ;  
    INSERT INTO B(NAME ,aid) VALUES('d' , 8) ;  

我们用GROUP BY 在A表查询,以name作为分组,比如:

SELECT a.name FROM A GROUP BY a.name ;

然后我们使用连接查询:

    SELECT a.id ,a.name ,b.name FROM A a   
    LEFT JOIN B b  
    ON(a.id = b.aid) ;  

但我们现在需要用GROUP对上面的进行查询:

    SELECT a.id ,a.name ,b.name FROM A a   
    LEFT JOIN B b  
    ON(a.id = b.aid) GROUP BY b.name;  

结果
Mysql GROUP BY  排除null数据_sql group by null_05
从上面可以看出,当group by这列有null值时,group会把他们当成是同一个直接聚合。

但我现在需要把b.name=NULL的情况都查询出来,而不是聚合,那么怎么办?

后来在网上:http://stackoverflow.com/questions/4588935/group-by-do-not-group-null找到了方法。

我们可以使用一个UUID来对null值进行转换,这样每个b.name=null的行都会被查询出来而不是被分到同一组。

对于UUID我们可以查询MYSQL的技术文档http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

下面来尝试下:

#--增加一个UUID(),把b.name的NULL的值都转化为具有专一性的uuid,这样每个b.name都会不同,GROUP就不会对他们进行分组  
    SELECT a.id ,a.name ,b.name FROM A a   
    LEFT JOIN B b  
    ON(a.id = b.aid)   
    GROUP BY IFNULL(b.name,UUID());  

运行结果:

这样可以实现Mysql Group by NULL值。

public class ChineseName { String[] sName = new String[95]; String[] Name = new String[79]; public ChineseName() { sName[0] = "白|bai"; sName[1] = "白|bai"; sName[2]

redis desktop输出中文 redis key中文转码方案

Redis根据key查询时,值中中文显示如图:解决方法进入Redis[root@izwz93zaz redis-3.0.7]# cd bin/ [root@izwz93zaz1 bin]# ./redis-cli --raw 127.0.0.1:6379> get ab2694bNOAUTH Authentication required.注:出现 NOAUTH Authentication