SQL:电子邮件中最常出现的用户名,按电子邮件中的大多数条目排序

时间:2014-07-10 02:30:44

标签: mysql sql

这是一个非常相似的问题的链接,除了在他们的例子中他们只关注一个列,我将关注不止一个。 SQL Select most common values

这是我的问题:

我需要显示电子邮件地址,用户已留下的评论数量,并显示与每封电子邮件关联的最常用用户名。我已经完成了前两个步骤;即我有它显示电子邮件以及评论数量。现在,客户端需要最常用的用户名。

这是查询我上面提到的电子邮件和评论数量的查询。

select comment_author_email, count(*) from wp_comments group by comment_author_email order by count(*) desc

现在,我的任务是在第三列中显示最常用的用户名。

例如:

email  |  username | comment
------------------------------
1@test | one       | blah..
1@test | ONE       | blah..
1@test | one       | blah..
2@test | TWO       | blah..
2@test | TWO       | blah..
3@test | tre       | blah..

我希望作为输出

email   |numComments| mostCommonName
------------------------------------
1@test  | 3         | one
2@test  | 2         | TWO
3@test  | 1         | tre

2 个答案:

答案 0 :(得分:2)

这是使用group_concat() / substring_index()技巧的好地方。但这需要一个子查询。

select comment_author_email, sum(cnt),
       substring_index(group_concat(username order by cnt desc), ',', 1) as MostCommonName
from (select comment_author_email, username, count(*) as cnt
      from wp_comments
      group by comment_author_email, username
     ) cu
group by comment_author_email
order by sum(cnt) desc;

答案 1 :(得分:2)

这是另一种方法。 (通过在按频率排序的电子邮件+用户名上应用GROUP BY,可以轻松提取最常用的用户名):

select email, sum(n) numComments, username mostCommonName
from (
  select email, username, count(comment) n, count(username) u
  from wp_comments
  group by email, username
  order by u desc) a
group by email;

fiddle