sql: выбрать наиболее проголосовавших элементов от каждого пользователя - PullRequest
0 голосов
/ 05 января 2011

У меня есть таблица «voice_benefits» со следующей схемой: id (int 11) id_benefit (int 11) рейтинг (int 11) мобильный телефон (VARCHAR 10) дата ввода (дата)

Люди могут голосовать (по звездной рейтинговой системе) за каждый предмет, давая ему от 1 до 5 звезд. Я должен получить количество голосов за каждый рейтинг для каждого пособия.

Контент похож на

id id_b rating cellphone  inputdate
1   2   5   123456789   2011-01-04 18:56:38
2   2   4   123456789   2011-01-04 19:03:27
3   2   4   123456789   2011-01-05 10:24:29
4   2   4   123456789   2011-01-05 10:24:33
5   2   5   123456789   2011-01-05 10:24:37
6   2   5   123456789   2011-01-05 10:24:42
7   2   4   123456789   2011-01-05 10:24:43
8   2   5   123456789   2011-01-05 10:24:44
9   2   4   123456789   2011-01-05 10:24:45
10  2   5   123456789   2011-01-05 10:24:48
11  2   5   123456789   2011-01-05 10:25:42
12  3   4   123456789   2011-01-05 10:49:20
13  3   5   123456789   2011-01-05 10:49:21
14  3   4   123456789   2011-01-05 10:49:22
15  3   5   123456789   2011-01-05 10:52:44
16  3   5   123456789   2011-01-05 10:52:45
17  3   4   123456789   2011-01-05 10:53:04
18  3   4   123456789   2011-01-05 10:53:05

Я хочу получить эти самые популярные голосования, сгруппированные по id_benefit Я добрался до

SELECT id_benefit, count( * ) AS votes, rating
FROM `vote_benefits 
GROUP BY id_benefit, rating

что дает мне

id_b votes rating
2   5      4
2   6      5
3   4      4
3   3      5

Но я бы хотел сгруппировать их по id_b, получив только строку с наибольшим количеством голосов для каждого id_b:

id_b votes rating
2      6     5
3      4     4

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

Ответы [ 2 ]

1 голос
/ 05 января 2011
select 
id_b, max(rating_count), rating 
from 
(
  select id_b, rating, count(*) as rating_count 
  from vote_benefits 
  group by id_b, rating 
) as tbl
group by id_b;
1 голос
/ 05 января 2011

Я считаю, что должно работать следующее:

SELECT id_b, MAX(votes), rating 
FROM (SELECT id_benefit, count( * ) AS votes, rating
        FROM `vote_benefits 
    GROUP BY id_benefit, rating) 
GROUP BY id_b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...