我有一个名为table_contacts的mySQL工作台表,其中包含以下字段:
user_id和PrimaryEmail
我想编写一个查询,对于表中的每一行都将返回:
User_id,PrimaryEmail和表中该电子邮件地址的出现次数。所以我希望返回以下表格:
我知道我需要使用子查询。到目前为止,我有:
select user_id, PrimaryEmail,
(select Count(PrimaryEmail) from table_contacts where PrimaryEmail = table_contacts.PrimaryEmail)
from table_contacts
但这会返回表格中所有电子邮件地址的数量。
我做错了什么?
答案 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;