[SQL] GROUP BY - 그룹화하지 않음 NULL
SQLGROUP BY - 그룹화하지 않음 NULL
나는 기능에 의해 그룹을 사용하여 결과를 반환하는 방법을 알아 내려고 노력하고있어.
GROUP BY는 예상대로 작동하지만, 내 질문은 : 그것은 NULL 필드를 무시하여 그룹을 가질 수 있습니다. 그래서 그렇지 않은 그룹 NULL을 함께한다는 것을 나는 아직도 지정된 필드가 NULL 인 모든 행을 필요로하기 때문이다.
SELECT `table1`.*,
GROUP_CONCAT(id SEPARATOR ',') AS `children_ids`
FROM `table1`
WHERE (enabled = 1)
GROUP BY `ancestor`
그래서 지금은 5 개 행이 말할 수와 조상 필드는 나에게 1 개 행을 반환 NULL입니다 .... 그러나 나는 모든 5를 원한다.
해결법
-
==============================
1.아마도 당신은에 그들 고유 및 그룹 만들기 위해 널 컬럼에 무언가를 추가해야합니까? 난 그냥뿐만 아니라 UUID 대신 사용하는 시퀀스의 일종 ()하지만,이 힘의 일을 찾고 있었다.
아마도 당신은에 그들 고유 및 그룹 만들기 위해 널 컬럼에 무언가를 추가해야합니까? 난 그냥뿐만 아니라 UUID 대신 사용하는 시퀀스의 일종 ()하지만,이 힘의 일을 찾고 있었다.
SELECT `table1`.*, IFNULL(ancestor,UUID()) as unq_ancestor GROUP_CONCAT(id SEPARATOR ',') AS `children_ids` FROM `table1` WHERE (enabled = 1) GROUP BY unq_ancestor
-
==============================
2.열 Y로 그룹화 할 때, Y의 값은 NULL이다하는 모든 행은 함께 그룹화된다.
열 Y로 그룹화 할 때, Y의 값은 NULL이다하는 모든 행은 함께 그룹화된다.
NULL은 NULL 동일하지이기 때문에 약간 놀라운하지만이 동작은 SQL-2003 표준에 의해 정의된다.
당신은 다른 값을 그룹화하여 해결할 수 있습니다, 당신의 그룹화 열의 데이터의 (수학적으로 말하기) 일부 기능.
고유 한 열 X가있는 경우 다음이 용이하다.
X Y ------------- 1 a 2 a 3 b 4 b 5 c 6 (NULL) 7 (NULL) 8 d
SELECT GROUP_CONCAT(`X`) FROM `tbl` GROUP BY `Y`;
결과:
GROUP_CONCAT(`foo`) ------------------- 6,7 1,2 3,4 5 8
SELECT GROUP_CONCAT(`X`) FROM `tbl` GROUP BY IFNULL(`Y`, `X`);
결과:
GROUP_CONCAT(`foo`) ------------------- 6 7 1,2 3,4 5 8
SELECT GROUP_CONCAT(`X`), IFNULL(`Y`, `X`) AS `grp` FROM `tbl` GROUP BY `grp`;
결과:
GROUP_CONCAT(`foo`) `grp` ----------------------------- 6 6 7 7 1,2 a 3,4 b 5 c 8 d
당신은 당신이 사용할 수있는 고유 한 열이없는 경우 대신 고유 한 자리 값을 생성 할 수 있습니다. 나는 독자에게 연습으로이 떠날거야.
-
==============================
3.GROUP BY IFNULL (required_field, ID)
GROUP BY IFNULL (required_field, ID)
-
==============================
4.
SELECT table1.*, GROUP_CONCAT(id SEPARATOR ',') AS children_ids FROM table1 WHERE (enabled = 1) GROUP BY ancestor , CASE WHEN ancestor IS NULL THEN table1.id ELSE 0 END
-
==============================
5.어쩌면 경우 이전 솔루션의 빠른 버전 당신은 (그것을 table1.id입니다 가정하자) 표에서 고유 한 식별자를 가지고 :
어쩌면 경우 이전 솔루션의 빠른 버전 당신은 (그것을 table1.id입니다 가정하자) 표에서 고유 한 식별자를 가지고 :
SELECT `table1`.*, GROUP_CONCAT(id SEPARATOR ',') AS `children_ids`, IF(ISNULL(ancestor),table1.id,NULL) as `do_not_group_on_null_ancestor` FROM `table1` WHERE (enabled = 1) GROUP BY `ancestor`, `do_not_group_on_null_ancestor`
from https://stackoverflow.com/questions/4588935/group-by-do-not-group-null by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 기본 키는 SQL Server의 필요가 있습니까? (0) | 2020.06.27 |
---|---|
[SQL] 마이크로 소프트 SQL Server Management Studio를 사용하여 데이터베이스의 모든 트리거에 대한 스크립트를 생성하는 방법 (0) | 2020.06.27 |
[SQL] 새 선택적 매개 변수를 허용하도록 SQL 서버 기능을 변경합니다 (0) | 2020.06.27 |
[SQL] 어떻게 SQL 데이터베이스 테이블에 날짜를 삽입? (0) | 2020.06.27 |
[SQL] 디폴트 값으로 테이블에 열을 추가 기존 컬럼의 값과 동일 (0) | 2020.06.27 |