簡體   English   中英

計算所有行並根據頻率返回值

[英]Count all rows and return values based on frequency

我想做一個查詢,計算我表中的所有“電子郵件”行,並根據頻率返回所有值。 我不想對結果進行分組,我想顯示結果的每個變體,這是我到目前為止所擁有的,因為你可以看到它按頻率排序但是按組合並它們我只是喜歡顯示除了頻率之外,它們都是。

select email 
from uploads 
group by email
order by count(*) desc

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');

這是我想要的結果

|              EMAIL |
----------------------
|    test@email.com  |
|    test@email.com  |
|    test@email.com  |
|    test2@email.com |
|    test2@email.com |
|    test3@email.com |
|    test4@email.com |

您可以加入一個子查詢,該子查詢返回每封電子郵件的聚合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

實際上,這會產生如下結果,盡管您實際上並未在SELECT列表中包含num列:

|              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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM