use*_*990 170 mysql group-concat
我在做SELECT GROUP_CONCAT(categories SEPARATOR ' ') FROM table.以下示例数据:
categories
----------
test1 test2 test3
test4
test1 test3
test1 test3
Run Code Online (Sandbox Code Playgroud)
但是,我test1 test2 test3 test4 test1 test3回来了,我想test1 test2 test3 test4回来.有任何想法吗?
非常感谢!
Nak*_*lda 341
GROUP_CONCAT具有DISTINCT属性:
SELECT GROUP_CONCAT(DISTINCT categories ORDER BY categories ASC SEPARATOR ' ') FROM table
Run Code Online (Sandbox Code Playgroud)
Sal*_*lil 46
使用DISTINCT将起作用
SELECT GROUP_CONCAT(DISTINCT(categories) SEPARATOR ' ') FROM table
Run Code Online (Sandbox Code Playgroud)
参考: - 这个
fth*_*lla 17
这个问题的其他答案不会返回OP需要的内容,它们将返回如下字符串:
test1 test2 test3 test1 test3 test4
Run Code Online (Sandbox Code Playgroud)
(注意test1并且test3重复)当OP想要返回此字符串时:
test1 test2 test3 test4
Run Code Online (Sandbox Code Playgroud)
这里的问题是,字符串"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);
Run Code Online (Sandbox Code Playgroud)
然后我们可以运行这个查询:
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;
Run Code Online (Sandbox Code Playgroud)
我们得到这样的结果:
test1
test4
test1
test1
test2
test3
test3
test3
Run Code Online (Sandbox Code Playgroud)
然后我们可以使用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;
Run Code Online (Sandbox Code Playgroud)
请看这里的小提琴.
Moh*_*med 14
您可以简单地在前面添加DISTINCT。
SELECT GROUP_CONCAT(DISTINCT categories SEPARATOR ' ')
Run Code Online (Sandbox Code Playgroud)
如果你想排序,
SELECT GROUP_CONCAT(DISTINCT categories ORDER BY categories ASC SEPARATOR ' ')
Run Code Online (Sandbox Code Playgroud)
小智 12
DISTINCT:将为您提供独特的价值。
SELECT GROUP_CONCAT(DISTINCT(categories )) AS categories FROM table
Run Code Online (Sandbox Code Playgroud)
小智 11
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;
Run Code Online (Sandbox Code Playgroud)
这将返回不同的值,如:test1,test2,test4,test3
| 归档时间: |
|
| 查看次数: |
137670 次 |
| 最近记录: |