我有一个包含如下列和值的MySQL表:
Column "A": 1, 5, 3, 2, 3, 1, 4, 5, ...
Column "B": 11, 15, 10, 12, 13, 14, 15, 10, 11, ...
Column "C": .... etc.表中有多个具有重复数值的列。
我想在每一列中找出唯一的值。因此,对于"A“栏,它将返回1,2,3,4,5。
目前,我正在为一列使用此查询:
SELECT concat(A) FROM table GROUP BY A;
但我不知道如何处理多列
发布于 2015-05-23 20:49:37
如果它是一组足够小的值,您可以使用GROUP_CONCAT聚合函数,并使用DISTINCT关键字
例如:
SELECT GROUP_CONCAT(DISTINCT a ORDER BY a) AS a_values
, GROUP_CONCAT(DISTINCT b ORDER BY b) AS b_values
, GROUP_CONCAT(DISTINCT c ORDER BY c) AS c_values
FROM mytable GROUP_CONCAT返回的字符串的长度受到max_group_concat_len变量(它在引用中)的限制,我认为max_allowed_packet也起作用。
比较返回到max_group_concat_len的字符串的长度,看看它是否更短,以了解返回字符串没有被静默截断。
如果您想将所有这些值合并到一个单独的列表中,您可以这样做:
SELECT GROUP_CONCAT(DISTINCT val ORDER BY val) AS col_values
FROM ( SELECT a AS val FROM mytable
UNION
SELECT b FROM mytable
UNION
SELECT c FROM mytable
) v编辑
我对查询中CONCAT函数的使用感到困惑,并误读了规范。上面的查询返回一个单个行,并返回一个与OP指定的结果完全相同的结果:
1,2,3,4,5,...如果我们想在一个单独的行上返回每个值,结果如下所示:
val
---
1
2
3
4
5然后,Tim3880的答案中的查询就可以做到这一点,但是外部查询并不是真正必要的。
我希望按以下方式添加一个订单,并实际编写如下查询:
(SELECT a AS val FROM mytable)
UNION
(SELECT b AS val FROM mytable)
UNION
(SELECT c AS val FROM mytable)
ORDER BY 1编辑
添加了SQL,显示了我如何解释规范(表、列、示例值),以及上面SQL语句的结果。一个语句作为单个行返回不同的值(前面的查询)和一个返回逗号分隔列表的语句(我的答案中的第一个查询)。
http://sqlfiddle.com/#!9/3d61c/1
如果我们想识别值出现在
SELECT v.val
, GROUP_CONCAT(DISTINCT v.col ORDER BY v.col) AS in_cols
, MAX(v.col='a') AS in_col_a
, MAX(v.col='b') AS in_col_b
, MAX(v.col='c') AS in_col_c
FROM (
SELECT a AS val, 'a' AS col FROM mytable
UNION
SELECT b AS val, 'b' AS col FROM mytable
UNION
SELECT c AS val, 'c' AS col FROM mytable
) v
GROUP BY v.val
ORDER BY v.val发布于 2015-05-23 20:41:08
如果您的查询对A有效,那么您可以使用以下方法对A、B、C进行查询:
SELECT A FROM
(
SELECT A FROM table
UNION
SELECT B FROM table
UNION
SELECT C FROM table
) e只要这三列具有兼容的类型。
https://stackoverflow.com/questions/30417318
复制相似问题