SQL - получить разные значения и его частоту встречаемости в группе - PullRequest
1 голос
/ 30 сентября 2019

У меня есть данные таблицы:

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, 2, B в 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 ]

2 голосов
/ 30 сентября 2019

использование 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 голос
/ 30 сентября 2019

Вы можете попробовать ниже - используйте count(distinct s_product_id)

select search_product_result, count(distinct s_product_id) as Total 
from serp group by search_product_result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...