Решено - суммировать столбец строк в случае определенного условия - PullRequest
1 голос
/ 23 января 2012

У меня есть таблица с userid points expires, и я хочу суммировать только все точки, которые соответствуют определенным userid и CURTIME() < expires.

Так я и сделал:

select
  *, sum(points) as points
from infraction
where
  userid=13999
  and CURTIME() < expires;

Но он возвращает мне весь столбец точек и не подвергает цензуре следующее CURTIME() < expires условие.

Решите:

Извините! мой плохой, остальные строки где в условиях условия.

Моим решением было хорошее решение, а также всем остальным помощникам я не ответил им, ГДж.

СПАСИБО за всех хороших помощников, вы превосходны.

Спасибо всем помощникам.

Ответы [ 3 ]

2 голосов
/ 23 января 2012

это expires только время или полный datetime?Во втором случае вам нужно сравнить с NOW, а не CURTIME

SELECT sum(points) as points
FROM infraction
WHERE
  userid=13999
  AND NOW() < expires;
1 голос
/ 23 января 2012

вам нужно выбрать ограниченный набор, а затем сложить их ...

slect sum(points) as points from (select
  *
from infraction
where
  userid=13999
  and CURTIME() < expires
) as temp1
1 голос
/ 23 января 2012

У вас нет предложения GROUP BY, но вы выбираете все столбцы. Вам нужно будет добавить что-то вроде следующего:

SELECT
  inf.*,
  infsum.points
FROM 
  (SELECT SUM(points) AS points, id FROM infraction GROUP BY id) AS infsum
  JOIN infraction AS inf ON inf.id = infsum.id
WHERE inf.userid=13999 AND CURTIME() < inf.expires

При этом используется подзапрос для получения суммированных баллов по идентификатору (замените правильное имя столбца на id) и объединяет его с полной таблицей по этому идентификатору. Снова замените правильный столбец на inf.id и infsum.id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...