SQL Distinct只在一列上



我有下面的表格

<<p>表strong> GroupChat
GroupChatId int
GroupCode varchar(20)
Name varchar(50)
<<p>表strong> GCMembers
ID int 
ParticipantUserID int
GroupChatID int
<<p>表strong>
ID
Sender
Receiver

我运行以下查询

Select distinct GC.GroupChatID, GC.Name
from Chats chats 
inner join GroupChats GC on chats.Receiver = GC.GroupCode
inner join GCMembers GCM on GC.GroupChatID = GCM.GroupChatID 
where GCM.ParticipantUserID = 3 

这工作完美,但我只想有不同的GroupChatID。换句话说,如果GroupChatID已经存在于查询结果中,则不必添加它。值GCM.ParticipantUserID来自另一个表(外键),不需要与这个问题做任何事情,所以我没有包括在这里。任何int值都可以。

我怎么才能做到呢?提前感谢您的帮助。

示例数据
GroupChat
GroupChatID - GroupCode - Name
1             GC1    Group1
2             GC2     Group2

,

Chats
ID - SENDER - RECIEVER
1      2        GC1
2      3        GC2
3      3        GC1
4      3        GC1
GCMembers
ID - ParticipantUserID - GroupChatID
1           2                1
2          3                1
3           3                2

输出应该是

GroupchatID:1 and Name:Group1

您要找的是OVER(PARTITION BY...)

不幸的是,我没有一个SQL服务器运行的时刻,我不想写代码未经测试,但你可以找到下面的例子:https://www.sqlshack.com/sql-partition-by-clause-overview/

您需要对行进行分组,并为Name选择任何值。SQL没有ANY函数,但是您可以使用MINMAX:

Select GC.GroupChatID, MIN(GC.Name) AS Name
from Chats chats inner join GroupChats GC on chats.Reciever=GC.GroupCode
inner join GCMembers GCM on GC.GroupChatID=GCM.GroupChatID 
where GCM.ParticipantUserID=3
GROUP BY GC.GroupChatID

相关内容

  • 没有找到相关文章

最新更新