这是一个非常相似的问题的链接,除了在他们的例子中他们只关注一个列,我将关注不止一个。 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
答案 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;