2012-03-28 63 views
2

我有一个表,如:如何防止MYSQL GROUP BY坍塌NULL值到一行

table a 
+------+-------+ 
| v1 | v2 | 
+------+-------+ 
| 1 | one | 
| 2 | two | 
| 3 | two | 
| 4 | two | 
| 5 | NULL | 
| 6 | NULL | 
| 7 | three | 
| 8 | three | 
+------+-------+ 

我想组在该表中的数据由列“V2” ...

mysql> select * from a group by v2 order by v1; 
+----+-------+ 
| v1 | v2 | 
+----+-------+ 
| 1 | one | 
| 2 | two | 
| 5 | NULL | 
| 7 | three | 
+----+-------+ 

...但保留单独的行上的NULL值。是否有可能防止NULL值被合并为单行?

回答

4

这将完成你的要求:

select min(v1) as v1, v2 from a group by v2, ifnull(v2, v1) order by v1; 

这组由v2,除非是NULL,在这种情况下,将通过v1组。由于您的两个NULL值对于v1有两个不同的值,因此会将它们分开。

+0

我需要所有具有NULL值的行上的'v1'-s,但对于其他行而言,哪些'v1'-s仍然没有关系。 'table a'来自另一个具有LEFT JOIN-s的select语句,它产生NULL-s。 ('v1'-s是ID值...) – gregn3 2012-03-28 17:50:58

+0

@ gregn3好的,现在对我有意义...我已经更新了相应的答案。 – 2012-03-28 17:53:42

+1

这很有效,非常感谢!我已经接受你的答案。 – gregn3 2012-03-28 17:56:33