MySQL DISTINCT在SELECT中被忽略显示重复
我有下面的查询,它连接了3个表,但显示了重复的结果,其中我通过在r.Email列上使用DISTINCT只显示了记录的一个实例MySQL DISTINCT在SELECT中被忽略显示重复,mysql,sql,Mysql,Sql,我有下面的查询,它连接了3个表,但显示了重复的结果,其中我通过在r.Email列上使用DISTINCT只显示了记录的一个实例 SELECT DISTINCT FirstName, LastName, r.Email, ListingID, ListingFirmID FROM sancap_Residential_Property e JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID JOIN sancap_Office
SELECT DISTINCT FirstName, LastName, r.Email, ListingID, ListingFirmID
FROM sancap_Residential_Property e
JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID
JOIN sancap_Office d ON e.ListingFirmID=d.firmID
WHERE ListingFirmID != 'BrokerC'
数据看起来是这样的,ListingID信息是唯一的,这就是为什么我认为查询显示的是代理ID。我如何克服这个问题
Buck | Rogers | buck@rogers.com | 656565 | BrokerAA
Buck | Rogers | buck@rogers.com | 787878 | BrokerAA
Pamm | Feeets | pamm@feeets.com | 999999 | BrokerBB
我想要的结果是:
Buck | Rogers | buck@rogers.com | 656565 | BrokerAA
Pamm | Feeets | pamm@feeets.com | 999999 | BrokerBB
像这样试试
SELECT FirstName, LastName, r.Email, ListingID, ListingFirmID
FROM sancap_Residential_Property e
JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID
JOIN sancap_Office d ON e.ListingFirmID=d.firmID
WHERE ListingFirmID != 'BrokerC'
group by FirstName, LastName, r.Email,ListingFirmID
像这样试试
SELECT FirstName, LastName, r.Email, ListingID, ListingFirmID
FROM sancap_Residential_Property e
JOIN sancap_Agent r ON e.ListingAgentID=r.AgentID
JOIN sancap_Office d ON e.ListingFirmID=d.firmID
WHERE ListingFirmID != 'BrokerC'
group by FirstName, LastName, r.Email,ListingFirmID
最好尝试
分组方式
和min()
函数
SELECT FirstName, LastName, r.Email, min(ListingID) as ListingID, ListingFirmID
FROM sancap_Residential_Property e
JOIN sancap_Agent r ON e.ListingAgentID = r.AgentID
JOIN sancap_Office d ON e.ListingFirmID = d.firmID
WHERE ListingFirmID != 'BrokerC'
GROUP BY FirstName, LastName, r.Email, ListingFirmID
通过以上查询,您将得到
FirstName、LastName、r.Email、ListingFirmID
以及ListingID
的最小值的不同组合,最好尝试分组方式和min()
函数
SELECT FirstName, LastName, r.Email, min(ListingID) as ListingID, ListingFirmID
FROM sancap_Residential_Property e
JOIN sancap_Agent r ON e.ListingAgentID = r.AgentID
JOIN sancap_Office d ON e.ListingFirmID = d.firmID
WHERE ListingFirmID != 'BrokerC'
GROUP BY FirstName, LastName, r.Email, ListingFirmID
通过以上查询,您将得到FirstName、LastName、r.Email、ListingFirmID
以及ListingID
的不同组合,并且结果应该是?r.AgentID的分组是否有效?更新以显示所需结果。对非常感谢乔,我会去读更多关于小组的内容。谢谢DISTINCT
适用于结果的所有列。关于这个规则,你的结果没有重复。仅按单个列进行分组是无效的SQL,每隔一个DBMS将拒绝该SQL。您应该意识到后果:并且结果应该是?r.AgentID对groupbyr.AgentID
work?进行更新以显示所需的结果。对非常感谢乔,我会去读更多关于小组的内容。谢谢DISTINCT
适用于结果的所有列。关于这个规则,你的结果没有重复。仅按单个列进行分组是无效的SQL,每隔一个DBMS将拒绝该SQL。你应该意识到后果:如果只有电子邮件是不同的(据我所知),那么在groupby
子句中保留r.email
就足够了,这将加快分组速度。嗯?请记住,这将从组返回一个未确定的ListingID
@Kleskowy,是的,但是出于这个原因,可以认为最好按列出组中的所有非聚合列(我怀疑这会大大加快分组速度)。我更喜欢Ambrish的答案,但导致这些问题的数据结构明显缺乏规范化。如果只有电子邮件是不同的(据我所知),那么在GROUP BY
子句中保留r.email
就足够了,这将加快分组速度。嗯?请记住,这将从组返回一个未确定的ListingID
@Kleskowy,是的,但是出于这个原因,可以认为最好按列出组中的所有非聚合列(我怀疑这会大大加快分组速度)。我更喜欢Ambrish的答案,但数据结构明显缺乏规范化,这导致了这些问题。