我希望你能帮我解决下一个问题。我试图找出在某些条件发生时如何计算许多记录。
我的输入示例如下所示:
fullname emailaddress1 telephone1
Juana Foster juana
Juana Foster juana 1933595322
Henzley 1841901633
Henzley henzley 1841901633
Hoyle hoyle 1584190699
Hoyle hoyle 1584190655
Aaron Jeans alpha2222 1816808600
Aaron Jeans alpha 1816808600
Erick Martin a1009 1816250211
Erick Martin martin 1565960141
Erick Martin a1009
Erick Martin martin 1565960141
我想将与下一个条件匹配的事件分组:
Fullname = Fullname and ((emailaddress = emailaddress and emailaddress != '') OR (telephone=telephone and telephone != ''))
。
换句话说,我想在一行中分组,所有行具有相同的全名和相同的电子邮件或地址。电子邮件和地址必须清空才能被视为可匹配。
预期输出为:
fullname occurrences
Juana Foster 1
Henzley 1
Hoyle 1
Aaron Jeans 1
Erick Martin 2
我在循环中解决问题没有任何问题,但我一直在思考如何在SQL中解决问题,并尝试了GROUP BY和UNIONS,但是我还没有达到解决方案。我正在使用mySQL。
更新
我提供了一个更具体案例的新例子,以澄清信息:
例如,下一个输入
fullname emailaddress1 telephone1
Aaron Jeans alpha2222 1816808600
Aaron Jeans 1816808600
Aaron Jeans alpha2222 1816808600
Aaron Jeans alpha 1816808600
Erick Martin a1009 1816250211
Erick Martin a1009
Erick Martin 1816250211
Erick Martin martin 1565960141
Erick Martin martin 1565960141
Nacho Mason 1111111111
Nacho Mason 2222222222
在这种情况下,输出应为:
Aaron Jeans 1
Erick Martin 2
Nacho Mason 2
Aaron Jeans有一次出现,因为他的4个唱片共享同一部电话。
Erick Martin有两次出现,第一次出现在下一个案例中:
Erick Martin a1009 1816250211
Erick Martin a1009
Erick Martin 1816250211
由于3条记录共享相同的全名和(相同的电子邮件(a1009)或同一部电话(1816250211)),因此这3条记录被认为是1次。 Erick Martin的第二次出现与下两个记录匹配,因为它具有相同的全名,相同的电子邮件和相同的电话。
Erick Martin martin 1565960141
Erick Martin martin 1565960141
答案 0 :(得分:0)
我认为这可能是你想要做的事情。 首先,您要对电子邮件不为空白且电话不是空白的所有事件进行选择,如
SELECT fullname,emailaddress1,telephone1,COUNT(*) AS occurrences
FROM T
WHERE emailaddress1 != ''
AND telephone1 != ''
GROUP BY fullname,emailaddress1,telephone1
然后现在你外部SELECT和MAX(出现)GROUP BY fullname
SELECT fullname, MAX(occurrences) as occurrences
FROM
(SELECT fullname,emailaddress1,telephone1,COUNT(*) AS occurrences
FROM T
WHERE emailaddress1 != ''
AND telephone1 != ''
GROUP BY fullname,emailaddress1,telephone1
)AS result
GROUP BY fullname
sqlfiddle 至少,我认为这是你想要达到的目标。
但是很奇怪,如果你有另一个全名,包含3行相同的电子邮件和电话号码,以及相同的全名,另外两行相同的电子邮件和电话号码,如果这样Adam Smith adam 1234
Adam Smith adam 1234
Adam Smith adam 1234
Adam Smith smith 5678
Adam Smith smith 5678
你想表现为亚当史密斯3或亚当史密斯2或两者? 亚当史密斯3上面的查询
更新:我想根据你想要的输出你想要亚当史密斯3,因为你的Erick Martin 2,他将会选择Erick Martin 1,Erick Martin 2。