#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