2015-12-11 3 views
0

Я пытаюсь просто сделать запрос, который будет иллюстрировать, который студент из school_id 1 попавших в 1000-е пункт - в данном случае это «Шарон»Получить пользователь однотысячной точку (SQL запрос)

+++++++++++++++++++++++++++++++++++++ 
# id # school_id # student # points # 
# 1 #  1  # Harry # 100 # 
# 2 #  1  # Bob # 200 # 
# 3 #  1  # Jamie # 150 # 
# 4 #  1  # Lee # 200 # 
# 5 #  1  # John # 200 # 
# 6 #  1  # Sharon # 170 # 
# 7 #  2  # Tim # 2000 # 
+++++++++++++++++++++++++++++++++++++ 

я имел трещину следующего запрос, но не возвращает то, что я бы ожидать:

SELECT 
    SUM(points) as pointSum, student 
FROM testing 
GROUP BY school_id; 

я ожидал бы результат, как эта ...

++++++++++++++++++++++++++++++++++++++++ 
# id # school_id # student # pointsSum # 
# 6 #  1  # Sharon # 1020 # 
++++++++++++++++++++++++++++++++++++++++ 
+1

Не могли бы вы наметить ожидаемый результат. –

+0

Общее правило GROUP BY: Если указано предложение GROUP BY, каждая ссылка на столбец в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора – jarlh

+0

Это не похоже на установленную логику для меня. У него больше итеративного, процедурного чувства. Я бы рекомендовал сделать это с помощью хранимой процедуры. – duffymo

ответ

1

Используйте производную таблицу для вычисления SUM точек для пользователя и предыдущих пользователей (по id).

select name, sumpoints 
from 
(
select id, name, (select sum(points) from tablename t2 
        where t2.id <= t1.id) sumpoints AND t2.school_id = 1 
from tablename t1 
) dt 
where sumpoints >= 1000 
order by id 
limit 1 
+0

Ваш первый запрос сделал трюк! Благодаря выберите * от тестирования t1 где (выберите сумму (точки) от тестирования t2 где t2.id <= t1.id) > = 1000 заказ по идентификатору предел 1 – Zabs

+0

Ok - это отредактированный запрос на @Thorsten работает 100% отлично – Zabs

+1

Спасибо для редактирования. (Я пропустил это требование school_id = 1). – jarlh

Смежные вопросы