Есть таблица, содержащая следующие поля:
ID, FirstUserID, SecondUserID, FirstUserCount, SecondUserCount
.
При этом гарантируется, что FirstUserID <= SecondUserID
.
Нужно: за один проход посчитать сумму Count для пользователя, ID которого мы знаем.
Соответственно, нужно выбирать сначала FirstUserCount
при условии FirstUserID <= UserID
, а затем - SecondUserCount
с условием FirstUserID > UserID
, где UserID - переданный параметр. Суммировать можно в две различные переменные.
Могу ли я сделать это с помощью одного запроса MySQL?
Если нет, то как оптимально можно это сделать?
UPD: уникальность записи, а также то, что FirstUserID != SecondUserID - гарантируется.
Нужно: за один проход посчитать сумму Count для пользователя, ID которого мы знаем.
SELECT SUM(CASE
WHEN FirstUserID = @ID THEN FirstUserCount
WHEN SecondUserID = @ID THEN SecondUserCount
END) totalSum
FROM `table`;
Запрос даст неверный результат, если существует запись, где FirstUserID = SecondUserID = @ID. Но это ведь несложно исправить...
PS. Но куда как разумнее нормализовать структуру.
Так не пойдёт?
SELECT
(SELECT SUM(a.FirstUserCount) FROM tbl a WHERE a.FirstUserId = :userId) +
(SELECT SUM(b.SecondUserCount) FROM tbl b WHERE b.SecondUserId = :userId) as total;
Либо:
SELECT SUM(
IF(FirstUserID = :userId, FirstUserCount, 0) +
IF(SecondUserID = :userId, SecondUserCount, 0)
) as total
FROM tbl;
Можно добавить WHERE FirstUserID = :userId OR SecondUserId = :userId
для возможности дальнейшей оптимизации с помощью индексов.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть задачаНужно вбить в поле процент, и на этот процент уменьшить увеличить поле price в выбранной категории, а значение которое было в поле...
При вводе любой команды через командную строку Windows возникает такая ошибка: ERROR 2006 (HY000): MySQL server has gone awayПроисходит реконнект и команда срабатывает...
Помогите, пожалуйста, не могу объединить два запроса в одинКаждый из них выводит строчку с нужными данными по итогу
Для MS SQL есть возможность установки TRANSACTION ISOLATION LEVEL в хранимых процедурахНапример: