簡體   English   中英

MySQL DISTINCT 在 GROUP_CONCAT()

[英]MySQL DISTINCT on a GROUP_CONCAT()

我正在做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是重復的),而OP希望返回此字符串:

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 ' ')

select group_concat(distinct(tablename.column1)) as column1 from tablename

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM