@megamutex

Как правильно сформировать SQL запрос?

Добрый день. Есть три таблицы user, point_user, point
Запросом ниже вывожу имя, логин человека кол-во набранных очков и название за что дали очки.
SELECT user.login, user.name, point_user.pointsCount, point.pointKey
FROM user, point_user, point
WHERE user.userId = point_user.userId AND point_user.pointId = point.pointId ORDER BY user.login

В итоге таблица выдает такой результат:
0175d82c226f4e419ff3c2c7c477fd55.jpg
Вопрос:
Как сделать, чтобы одинаковые значения объединялись, суммировались?
  • Вопрос задан
  • 326 просмотров
Пригласить эксперта
Ответы на вопрос 4
tigroid3
@tigroid3
PHP, YII2, SQL, Postgres, Docker, SPHINX, GIT
SELECT *, SUM(`поле с числами`) AS summa FROM `table` GROUP BY `name`
создаст новое поле summa, где будут записано суммарное значение у каждого name
Ответ написан
Комментировать
Light777
@Light777
Developer
Так попробуйте
SELECT user.login, user.name, SUM(point_user.pointsCount), point.pointKey
FROM user, point_user, point
WHERE user.userId = point_user.userId AND point_user.pointId = point.pointId GROUP BY point.pointKey ORDER BY user.login
Ответ написан
madmages
@madmages
Человек прямоходящий
Если исходить из:
1. Пользователь + тип очков (например за вход) это первичный ключ (количество очков не в счет потому что незачем, вдруг в будущем понадобится изменить на каждый вход это количество)

то запрос должен быть примерно таким (на точность не претендую потому что не могу проверить)

SELECT 
    u.login, 
    u.name, 
    SUMM(pu.pointsCount) as pointsCount, 
    p.pointKey
FROM 
    user u, 
    point_user pu, 
    point p
WHERE 
    u.userId = pu.userId AND 
    pu.pointId = p.pointId 
ORDER BY u.login 
GROUP BY 
    u.login, 
    p.pointKey
Ответ написан
Комментировать
@megamutex Автор вопроса
Всем спасибо. помогли. вот конечное решение, которое мне было нужно
SELECT user.login, user.name, sum(point_user.pointsCount) pointsCount, point.pointKey
     FROM user, point_user, point
    WHERE user.userId = point_user.userId 
      AND point_user.pointId = point.pointId 
    GROUP BY user.login, user.name, point.pointKey
    ORDER BY user.login
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы