Programing

GROUP_CONCAT ()에서 MySQL DISTINCT

알 수 없는 사용자 2020. 5. 30. 09:09
반응형

GROUP_CONCAT ()에서 MySQL DISTINCT


나는하고있다 SELECT GROUP_CONCAT(categories SEPARATOR ' ') FROM table. 아래 샘플 데이터 :

categories
----------
test1 test2 test3
test4
test1 test3
test1 test3

그러나, 나는 test1 test2 test3 test4 test1 test3돌아오고있다. 그리고 나는 되돌아 가고 싶다 test1 test2 test3 test4. 어떤 아이디어?

많은 감사합니다!


GROUP_CONCAT 에는 DISTINCT 속성이 있습니다.

SELECT GROUP_CONCAT(DISTINCT categories ORDER BY categories ASC SEPARATOR ' ') FROM table

DISTINCT를 사용하면 작동합니다

SELECT GROUP_CONCAT(DISTINCT(categories) SEPARATOR ' ') FROM table

REf :-


이 질문에 대한 다른 답변은 OP에 필요한 것을 반환하지 않으며 다음과 같은 문자열을 반환합니다.

test1 test2 test3 test1 test3 test4

(즉, 통지 test1test3영업 이익이 문자열을 반환하고자하는 동안 중복) :

test1 test2 test3 test4

여기서 문제는 문자열 "test1 test3"이 복제되고 한 번만 삽입되지만 다른 모든 문자열 은 서로 구별된다는 "test1 test2 test3"것입니다 ( "test1 test3"전체 문자열에 포함 된 일부 테스트 가 중복 된 경우에도와 는 다릅니다 ).

여기서해야 할 일은 각 문자열을 다른 행으로 나누는 것입니다. 먼저 숫자 테이블을 만들어야합니다.

CREATE TABLE numbers (n INT);
INSERT INTO numbers VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

그런 다음이 쿼리를 실행할 수 있습니다.

SELECT
  SUBSTRING_INDEX(
    SUBSTRING_INDEX(tableName.categories, ' ', numbers.n),
    ' ',
    -1) category
FROM
  numbers INNER JOIN tableName
  ON
    LENGTH(tableName.categories)>=
    LENGTH(REPLACE(tableName.categories, ' ', ''))+numbers.n-1;

우리는 다음과 같은 결과를 얻습니다.

test1
test4
test1
test1
test2
test3
test3
test3

DISTINCT 절을 사용하여 GROUP_CONCAT 집계 함수를 적용 할 수 있습니다.

SELECT
  GROUP_CONCAT(DISTINCT category ORDER BY category SEPARATOR ' ')
FROM (
  SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(tableName.categories, ' ', numbers.n), ' ', -1) category
  FROM
    numbers INNER JOIN tableName
    ON LENGTH(tableName.categories)>=LENGTH(REPLACE(tableName.categories, ' ', ''))+numbers.n-1
  ) s;

바이올린 여기를 참조 하십시오 .


SELECT
  GROUP_CONCAT(DISTINCT (category))
FROM (
  SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(tableName.categories, ' ', numbers.n), ' ', -1) category
  FROM
    numbers INNER JOIN tableName
    ON LENGTH(tableName.categories)>=LENGTH(REPLACE(tableName.categories, ' ', ''))+numbers.n-1
  ) s;   

test1, test2, test4, test3 과 같은 고유 값을 리턴합니다.


DISTINCT: 고유 한 값을 제공합니다.

SELECT GROUP_CONCAT(DISTINCT(categories )) AS categories FROM table

DISTINCT 를 앞에 추가하면 됩니다.

SELECT GROUP_CONCAT(DISTINCT categories SEPARATOR ' ')

정렬하려면

SELECT GROUP_CONCAT(DISTINCT categories ORDER BY categories ASC SEPARATOR ' ')

참고 URL : https://stackoverflow.com/questions/3083499/mysql-distinct-on-a-group-concat

반응형