如何在 MySQL 中将多列处理为一列?

Posted

技术标签:

【中文标题】如何在 MySQL 中将多列处理为一列?【英文标题】:How to address multiple columns as one in MySQL? 【发布时间】:2012-02-10 00:17:15 【问题描述】:

abc 列包含一些性质相同的值。我需要选择所有唯一值。如果我只有一列,我会使用类似

SELECT DISTINCT a FROM mytable ORDER BY a;

但我需要将 abc 列视为一个列,并获取其中出现的所有唯一值。

例如,让这是mytable 的 CSV 表示,第一行命名列:

a, b, c
1, 2, 3
1, 3, 4
5, 7, 1

查询的结果是:

1
2
3
4
5
7

更新:我不明白为什么你们都建议将其包装在额外的SELECT 中?在我看来,答案是

(SELECT `a` AS `result` FROM `mytable`)
UNION (SELECT `b` FROM `mytable`)
UNION (SELECT `c` FROM `mytable`)
ORDER BY `result`;

不是吗?

【问题讨论】:

您能否在问题中添加您想要的表结构示例输出? 【参考方案1】:

所以您想要一列都具有来自 a、b 和 c 的唯一值?试试这个:

(select a as yourField from d1)
union
(select b from d2)
union
(select c from d3)
order by yourField desc
limit 5

工作example

在要求更改后编辑...那里有您要求的order bylimit。当然,在这个例子中你只会得到 5 条记录

【讨论】:

op 要求唯一的结果集,而不仅仅是来自列的唯一结果。这将产生重复的值。 不,这不会产生重复。联合会为您提供来自所有三列的不同结果集。 我还想为结果列分配一个别名,对其进行排序和限制。在这种情况下,我应该把ASORDER BYLIMIT 放在哪里?我也很好奇在哪里可以放分号:-) mysqltutorial.org/sql-union-mysql.aspx 完全希望这将为您指明正确的方向。 查询有限制。 OP询问在哪里限制查询,所以我提供了信息。我还在答案中添加了一个工作示例【参考方案2】:

对不起,我想念你的问题。这是更新的查询。

select a from my table
UNION
select b from my table
UNION
select c from my table

【讨论】:

【参考方案3】:
SELECT tmp.a
FROM 
(SELECT column_1 AS a
FROM table
UNION
SELECT column_2 AS a
FROM table
UNION
SELECT column_3 AS a
FROM table) AS tmp
ORDER BY `tmp`.`a` ASC

【讨论】:

你的意思是这会产生不同的结果吗? @Ivan 我已经测试了答案的第一个版本并且有不同的结果,但我认为我的方法不需要不同,但您可以轻松实现排序并限制 手册说我可以把我的ORDER BYLIMIT 放在最后,只要我将单个SELECT 子句括在括号中,我可以用AS 指定别名第一个SELECT @Ivan 不确定您想要什么作为结果集。您可以添加一个示例结果集来澄清这一点。 示例结果包含在问题中,不是吗?【参考方案4】:

试试这个:

SELECT b.iResult
FROM
    (SELECT a as iResult FROM tableName
        UNION
    SELECT b as iResult FROM tableName
        UNION
    SELECT c as iResult FROM tableName) b
ORDER BY b.iResult 
LIMIT BY 10 -- or put any number you want to limit.

【讨论】:

以上是关于如何在 MySQL 中将多列处理为一列?的主要内容,如果未能解决你的问题,请参考以下文章

在 hive 中将多列连接为一列

在 Postgres 中将多列合并为一列

sql数据库中,如何将一个表中的多列数字合并为一列

Spark:将多列分解为一列

mysql中将一列以逗号分隔的值分割成多列显示?

如何在标准sql-大查询中将一列拆分为多列