Как мне получить количество строк с повторяющимися столбцами?

#mysql

#mysql

Вопрос:

допустим, что ниже приведена моя таблица

 id | name | topic | reply
...
1 | user1 | 00001 | yes              ## replied on topic 00001
2 | user2 | 00002 | yes              ** replied on topic 00002
3 | user1 | 00001 | yes              ## replied on topic 00001
4 | user5 | 00001 | no
5 | user1 | 00001 | yes              ## replied on topic 00001
6 | user1 | 00002 | no
7 | user2 | 00002 | yes              ** replied on topic 00002
8 | user3 | 00001 | no
9 | user4 | 00002 | yes
  

Представьте, что это таблица темы. Только пользователь1 и пользователь отвечают на одну тему более одного раза (темы 00001 и 00002)
Как я могу выбрать количество пользователей, которые отвечают на тему более одного раза, что должно возвращать 2 из 5

Ответ №1:

Это даст вам количество пользователей, которые ответили более одного раза по теме:

 SELECT COUNT(DISTINCT name)
FROM (
    SELECT name
    FROM  yourtable
    WHERE reply = 'yes'
    GROUP BY name, topic
    HAVING COUNT(*) > 1
) T1
  

Комментарии:

1. Вау, спасибо, чувак. Мне пришлось бы потратить день, чтобы написать такой запрос самостоятельно. 🙂

Ответ №2:

Сначала вам нужно определить количество ответов на пользователя в каждой теме, а затем подсчитать количество разных пользователей, у которых более одного ответа по любой теме.

 SELECT COUNT(DISTINCT name) FROM (
    SELECT name, topic, count(*) replies
    FROM table
    WHERE reply = 'yes'
    GROUP BY name, topic
) a
WHERE replies > 1