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】:这应该可行。请注意,子查询会筛选出所有不包含两个 id
s 的名称。
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 查询 - 在不同条件下两次显示同一列的主要内容,如果未能解决你的问题,请参考以下文章