MySQL은 그룹 다음에 null이 아닌 첫 번째 값을 가져옵니다.
고유하지는 않지만 필요한 데이터가 있는 큰 테이블이 있습니다.이 표는 여러 개의 조합을 선택한 결과이므로 실제 표가 아닙니다.다른 이유로 실제 테이블로 만들 수 없습니다.
UNION의 모든 테이블에는 결국 고유한 이메일 열이 있습니다.결과 레코드는 다음과 같습니다.
1   ozzy@test.com   Ozzy
2   test@test.com   Tony
3   test@yahoo.com  Steve
4   tiny@test.com   
13  tony@gmail.com  Tony
14  test@test.com   Ozzy
15  test@yahoo.com  Dave
16  tiny@test.com   Tim
보다시피 일부 전자 메일은 이름이 다르거나 존재하지 않는 이름으로 한 번 이상 나타납니다.추가할 때는GROUP BY email마지막 절에서 결과는 다음과 같습니다.
1   ozzy@test.com   Ozzy
2   test@test.com   Tony
3   test@yahoo.com  Steve
4   tiny@test.com   
13  tony@gmail.com  Tony
보다시피 이메일 4는 첫번째 항목을 선택했기 때문에 이름이 없습니다.NULL이름에 걸맞게그런 다음에 사용하려고 했습니다.GROUP_CONCAT결과는 다음과 같습니다.
1   ozzy@test.com   Ozzy
14  test@test.com   Ozzy,Tony
15  test@yahoo.com  Dave,Steve
16  tiny@test.com   Tim
13  tony@gmail.com  Tony
보시다시피, 이제 모든 사용자가 이름을 가지고 있지만 일부 행에는 둘 이상의 이름이 연결되어 있습니다.제가 하고 싶은 일은GROUP BY email그리고 첫번째를 선택합니다.NOT NULL각 행에 대한 각 열의 항목은 이론적으로 다음과 같습니다.
1   ozzy@test.com   Ozzy
2   test@test.com   Tony
3   test@yahoo.com  Steve
4   tiny@test.com   Tim
13  tony@gmail.com  Tony
사용해 보았습니다.COALESCE하지만 뜻대로 되지 않습니다.현재 쿼리는 다음과 같습니다.
SELECT
    id,
    email,
    `name`
FROM
(
    SELECT
        email,
        `name`
    FROM
        multiple_tables_and_unions
) AS emails
GROUP BY email
많은 테이블을 포함하고 있기 때문에 임시 테이블에서 코드를 제거했지만 모두 선택합니다.email그리고.name기둥.본질적으로 나는 다음과 같은 기능이 필요합니다.GROUP_COALESCE불행하게도 그것은 존재하지 않습니다.내 선택지는?
사용해보기MAX, 다음과 같이:
SELECT
    email,
    MAX(`name`)
FROM
(
    SELECT
        email,
        `name`
    FROM
        multiple_tables_and_unions
) AS emails
GROUP BY email
첫번째를 선택하려면non null가치,GROUP_CONCAT여기서 편리할 겁니다다음은 예시입니다.
SELECT
    email,
    SUBSTRING_INDEX(GROUP_CONCAT(`name`), ',',1)
FROM
(
    SELECT
        email,
        `name`
    FROM
        multiple_tables_and_unions
) AS emails
GROUP BY email;
언급URL : https://stackoverflow.com/questions/22782932/mysql-get-first-non-null-value-after-group-by
'programing' 카테고리의 다른 글
| Percona MySQL 마스터에서 MariaDB 슬레이브로 복제하는 것이 얼마나 안전합니까? (0) | 2023.09.08 | 
|---|---|
| Bootstrap4 dependency PopperJs가 Angular에서 오류를 발생시킵니다. (0) | 2023.09.08 | 
| NodeJS - MySQL(Callback) Connections를 MariaDB(Promise/async-wait)로 업데이트해야 합니까? (0) | 2023.09.08 | 
| 비활성화된 입력 요소를 고려하여 $.serialize()를 만드는 방법은 무엇입니까? (0) | 2023.09.08 | 
| PowerShell에서 DateTime을 UNIX 시간으로 변환하려면 어떻게 해야 합니까? (0) | 2023.09.08 |