MySQL: выберите только некоторые сгруппированные строки со значениями, связанными с самым высоким ID

0

У меня есть следующая база данных (маленький пример):

ID | username | action  | points | example
1  | matt     | login   | 3      | 135
2  | john     | comment | 6      | 156
3  | john     | login   | 6      | 189
4  | peter    | login   | 8      | 125
5  | peter    | login   | 8      | 165

Я хотел выбрать и сгруппировать имена пользователей, которые имеют одно и то же действие login и количество точек выше 5 (для всех действий). Все действия должны быть login. Таким образом, результаты будут без john, потому что есть действие comment, связанное с этим именем пользователя.

Связанный вопрос: MySQL: выберите только некоторые сгруппированные строки

Возможное решение:

SELECT    username, COUNT(*) AS cnt, SUM(points) AS points
FROM      tableX AS t
GROUP BY  username
HAVING    MIN(action) = 'login'
   AND    MAX(action) = 'login' 
   AND    SUM(points) > 5 ;

И результаты:

username | COUNT | points(SUM)
peter    | 2     | 16

Но тогда я хотел бы добавить к результатам все остальные значения из строки с самым высоким ID. Я попробовал подзапрос, но не нашел правильного решения.

Ожидаемые результаты:

ID | username | COUNT | points(SUM) | points | example
5  | peter    | 2     | 16          | 8      | 165

Есть ли у вас идеи? Большое вам спасибо!

SQL Fiddle

Теги:

1 ответ

0

Попробуйте следующее:

SELECT DISTINCT MAX(ID), username, action, SUM(points) as pointsSum, MAX(points) as pointsMax, MAX(example) as example 
FROM tableX 
WHERE action='login' GROUP BY username 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню