计算每个电子邮件地址的出现次数

时间:2015-03-13 09:03:10

标签: mysql

我有一个名为table_contacts的mySQL工作台表,其中包含以下字段:

user_id和PrimaryEmail

我想编写一个查询,对于表中的每一行都将返回:

User_id,PrimaryEmail和表中该电子邮件地址的出现次数。所以我希望返回以下表格:

enter image description here

我知道我需要使用子查询。到目前为止,我有:

select user_id, PrimaryEmail, 
(select Count(PrimaryEmail) from table_contacts where PrimaryEmail = table_contacts.PrimaryEmail) 
from table_contacts 

但这会返回表格中所有电子邮件地址的数量。

我做错了什么?

5 个答案:

答案 0 :(得分:3)

Simone和Grażynka的解决方案将按地址分组,因此每次电子邮件地址超过一次时,您将丢失一些行。

要显示具有相同电子邮件数量的所有行,您可以执行以下操作:

SELECT t1.user_id, t1.PrimaryEmail, (SELECT COUNT(*) FROM table_contacts t2 WHERE t2.PrimaryEmail = t1.PrimaryEmail) FROM table_contacts t1

答案 1 :(得分:2)

试试这个:

select user_id, PrimaryEmail, Count(PrimaryEmail)
from table_contacts
group by PrimaryEmail

在SQL tryit编辑器中,类似的查询将是

SELECT customerid,count(country),country FROM [Customers] group by country

但在这种情况下,您只收到每封电子邮件的计数(每封电子邮件一行)。如果你想列出添加了couunt的所有行,那么已经提出了其他(更好的)解决方案。

答案 2 :(得分:2)

试试这个:

Select user_id, primaryemail, count(*)
 from table_contacts
group by user_id, primaryemail

答案 3 :(得分:2)

您需要一个分组,而不是子查询

类似

select user_id, PrimaryEmail, Count(PrimaryEmail)
from table_contacts
group by PrimaryEmail

答案 4 :(得分:0)

这应该做的工作:

select t1.user_id, t1.PrimaryEmail, count(*) 
from table_contacts t1 
     join table_contacts t2 on t1.PrimaryEmail = t2.PrimaryEmail 
group by t1.user_id, t1.PrimaryEmail 
order by t1.user_id;