2011-02-23 2 views
0

그룹이 비어 있지 않은 한 m_group_name 열을 그룹화 (또는 적어도 고유하게 만들기)하려고합니다. 기존 그룹을 볼 수있는 반면 기본적으로 아직 그룹이없는 것을 확인한 다음 편집 할 수 있습니다.그룹화는 공백 일 경우 무시하지만

예 :

id | m_group_name 
--------------------- 
1 | Red 
2 | Blue 
3 | 
4 | Red 
5 | 

이상적으로 하나의 빨간색, 하나 파란색 및 2 개의 공백이 생깁니다.

나는 공백을 NULL로 만들고 UUID 값을주고 (비슷한 Stackoverflow에서 발견 된 비슷한 것을 적용한 후에) 시도했지만 모든 NULL을 같은 값으로 만드는 것처럼 보입니다.

SELECT *, IFNULL(m_group_name,UUID()) AS m_group FROM m GROUP BY m_group 

이상적으로 오히려

편집 완벽하게 정직하게 NULL을 사용하지 않는 게 좋을 'm_group_name가'잘못 예제에서 '그룹'으로 표시된 것을 깨달았다 - 수정.

답변

0

SELECT * FROM m WHERE LENGTH(Group) IN (0, NULL) * LENGTH(NULL)NULL을 반환합니다. LENGTH('')0을 반환합니다.

나는 아직 Group이없는 모든 행을보고 싶습니다.

편집 : 좋아, 잘 읽었습니다. 어때?

SELECT * FROM m WHERE LENGTH(Group) NOT IN (0, NULL) GROUP BY Group 
UNION ALL 
SELECT * FROM m WHERE LENGTH(Group) IN (0, NULL) 
+0

하나의 쿼리에서 고유 한 그룹 이름과 그룹을 아직 갖지 않은 모든 행이 가능합니까? – MrJ

+0

감사! 그게 모든 빈 그룹을 가지고, 가능하면 다른 유일한 고유 그룹이 너무 필요해 :) – MrJ

+0

그건 내 대답의 편집 섹션 아래에 코드가 될 것이다 :-) – cypher

1

UUID() 함수는 각 행에 대해 별도의 값이 아닌 쿼리 당 하나의 값을 반환하기 때문에 이러한 접근 방식이 작동하지 않습니다. 각 행에 대해 별도의 값을 생성하는)

SELECT *, IFNULL(m_group_name,id) AS m_group FROM m GROUP BY m_group 

또는 당신은 RAND (같은 다른 기능을 사용할 수 있습니다

당신은 기본 키를 사용할 수 있습니다. 문자열 값을 원하면 MD5()와 같은 해시 함수를 적용 할 수 있습니다.

SELECT *, IFNULL(m_group_name,md5(rand())) AS m_group FROM m GROUP BY m_group 
+0

그 이유는 설명과 대체 답변을 주셔서 감사합니다 - 같은 가치를 사용하는 것으로 나타났습니다 :) – MrJ

관련 문제