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
(즉, 통지 test1
및 test3
영업 이익이 문자열을 반환하고자하는 동안 중복) :
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
'Programing' 카테고리의 다른 글
UITableViewCell의 기본 높이는 얼마입니까? (0) | 2020.05.30 |
---|---|
HTML5의 캔버스 너비와 높이 (0) | 2020.05.30 |
파이썬 디버깅 팁 (0) | 2020.05.30 |
스타일 시트에서 IE (모든 버전) 만 타겟팅하는 방법은 무엇입니까? (0) | 2020.05.30 |
Apache mod_rewrite를 디버깅하는 방법 (0) | 2020.05.30 |