计算所有行并根据频率返回值

Ada*_*dam 3 mysql group-by count

我想做一个查询,计算我表中的所有"电子邮件"行,并根据频率返回所有值.我不想对结果进行分组,我想显示结果的每个变体,这是我到目前为止所拥有的,因为你可以看到它按频率排序但是按组合并,我只是喜欢显示除了频率之外,它们都是.

select email 
from uploads 
group by email
order by count(*) desc
Run Code Online (Sandbox Code Playgroud)

SQL -

CREATE TABLE uploads 
(
 email varchar(200)
);

INSERT INTO uploads
(email)
VALUES
('test@email.com'),
('test@email.com'),
('test@email.com'),
('test2@email.com'),
('test2@email.com'),
('test3@email.com'),
('test4@email.com');
Run Code Online (Sandbox Code Playgroud)

这是我想要的结果

|              EMAIL |
----------------------
|    test@email.com  |
|    test@email.com  |
|    test@email.com  |
|    test2@email.com |
|    test2@email.com |
|    test3@email.com |
|    test4@email.com |
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 6

您可以加入一个子查询,该子查询返回COUNT()每封电子邮件的聚合,并按递减计数排序:

SELECT 
  uploads.EMAIL
FROM
  uploads 
  JOIN (
    /* subquery returns distinct emails and their aggregate COUNT() */
    /* JOIN matches every row in `uploads` to the email and count */
    SELECT EMAIL, COUNT(*) as num FROM uploads GROUP BY EMAIL
  ) c ON uploads.EMAIL = c.EMAIL
ORDER BY 
  c.num DESC, 
  EMAIL ASC
Run Code Online (Sandbox Code Playgroud)

实际上,这会产生如下结果,尽管您实际上并未numSELECT列表中包含该列:

|              EMAIL | num |
----------------------------
|    test@email.com  | 3
|    test@email.com  | 3
|    test@email.com  | 3
|    test2@email.com | 2
|    test2@email.com | 2
|    test3@email.com | 1
|    test4@email.com | 1
Run Code Online (Sandbox Code Playgroud)