SQL-获取不同的值及其在组中出现的频率计数

时间:2019-09-30 06:08:00

标签: mysql sql group-by

我有一个表数据为:

CREATE TABLE SERP (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
s_product_id INT,
search_product_result VARCHAR(255)
);


INSERT INTO SERP(s_product_id, search_product_result)
VALUES 
   (0, 'A'),
   (0, 'B'),
   (0, 'C'),
   (0, 'D'),
   (1, 'A'),
   (1, 'E'),
   (2, 'A'),
   (2, 'B'),
   (3, 'D'),
   (3, 'E'),
   (3, 'D');

数据集如下:

s_product_id    |    search_product_result
___________________________________________
0               |    A
0               |    B
0               |    C
0               |    D
-------------------------------------------
1               |    A
1               |    E
-------------------------------------------
2               |    A
2               |    B
-------------------------------------------
3               |    D
3               |    E
3               |    D

我需要列出search_product_result中出现的所有不同的count值和这些值的s_product_id频率。

必需的输出结果集:

DISTINCT_SEARCH_PRODUCT  |   s_product_id_frequency_count    
------------------------------------------------------------
A                        |   3
B                        |   2
C                        |   1
D                        |   2 [occurred twice in 3, but counted only once.]
E                        |   2

此处,A出现在three s_product_id中:0, 1, 2B出现在two : 0, 2中,依此类推。

D在同一组3中发生了两次,但在该组中仅被计数一次。

我尝试过grouping by search_product_result,但这算为D twice in the same group

select search_product_result, count(*) as Total from serp group by search_product_result

输出:

search_product_result  |  Total
------------------------------------
A                      |  3
B                      |  2
C                      |  1
D                      |  3  <---
B                      |  2

2 个答案:

答案 0 :(得分:2)

使用count(distinct()

 select search_product_result, count(distinct s_product_id, search_product_result) as Total 
 from SERP 
 group by search_product_result

请参阅dbfiddle

答案 1 :(得分:1)

您可以在下面尝试-使用count(distinct s_product_id)

select search_product_result, count(distinct s_product_id) as Total 
from serp group by search_product_result