SQL 查询 - 在不同条件下两次显示同一列

Posted

技术标签:

【中文标题】SQL 查询 - 在不同条件下两次显示同一列【英文标题】:SQL Query - Displaying the same column twice under different conditions 【发布时间】:2012-02-01 18:53:45 【问题描述】:

我想知道以下是否可能。假设我有下表:

ID |姓名 1 |约翰 2 |鲍勃 3 |约翰 4 |鲍勃

是否可以运行导致以下结果的查询:

名字| ID1 | ID2 约翰   | 1    | 3 鲍勃    | 2    | 4

编辑

很抱歉给您带来了困惑。我的问题解决了我需要为大型数据集处理 2 个重复项的可能性的情况。

【问题讨论】:

您是说查询只需要处理 2 个重复项的可能性,还是您的示例有 2 个? 只需要处理2个重复的可能性。 【参考方案1】:

假设恰好有 2 个重复项

SELECT 
   NAME, 
   MIN(ID) as ID1,
   MAX(ID) as ID2
FROM Table t
GROUP BY NAME

【讨论】:

【参考方案2】:

这应该可行。请注意,子查询会筛选出所有不包含两个 ids 的名称。

select name,min(id) as id1,max(id) as id2
from table
join(
    select name
    from table
    group by name
    having count(1)=2
)names
using(name)
group by name;

【讨论】:

不确定您是否需要在此处加入。我也接近自然加入的-1 好吧,您可以加入或添加where name in (select name from table group by name having count(1)=2)。老实说,查询优化器通常会将其抽象掉。 我不确定他是否需要过滤,因为如果没有它,他将只有两个具有相同值的 id【参考方案3】:

如果每个名称恰好有两行,那么以下应该有效:

 SELECT a.name,
        a.id as id1,
        b.id as id2
 FROM the_table a 
   JOIN the_table b ON a.name = b.name AND a.id <> b.id

【讨论】:

这将给出重复的行,因为您不检查 id 值是否相同 这仍然会返回重复,你会看到一个 John | 1 | 3 和约翰 | 3 | 1,除非我弄错了:)

以上是关于SQL 查询 - 在不同条件下两次显示同一列的主要内容,如果未能解决你的问题,请参考以下文章

选择同一列两次,但条件不同

从同一个表中加入同一列两次时出现模棱两可的错误

如何在同一列或不同列的一个sql语句中两次使用'BETWEEN'条件

mysql 同一表同一字段满足不同条件的两次求和

如何以不同的条件选择相同的字段两次并将结果显示为单独的字段

SQL一次性查询一个字段不同条件下的统计结果