2014-02-07 2 views
0

Как я могу найти SUM всех баллов за минимальную дату каждого lesson_id пожалуйста:SQL: Нужно просуммировать столбец для каждого типа

----------------------------------------------------------- 
|id |uid |group_id |lesson_id |game_id |score |date  | 
----------------------------------------------------------- 
|1 |145 |1  |1   |0  |40 |1391627323 | 
|2 |145 |1  |1   |0  |80 |1391627567 | 
|3 |145 |1  |2   |0  |40 |1391627323 | 
|4 |145 |1  |3   |0  |30 |1391627323 | 
|5 |145 |1  |3   |0  |90 |1391627567 | 
|6 |145 |1  |4   |0  |20 |1391628000 | 
|7 |145 |1  |5   |0  |35 |1391628000 | 
----------------------------------------------------------- 

мне нужен выход:

------------------- 
|sum_first_scores | 
------------------- 
|165    | 
------------------- 

У меня есть это до сих пор, в котором перечислены оценки каждой минимальной даты, за урок, но мне нужно суммировать эти результаты, как описано выше:

SELECT lesson_id, MIN(date), score AS first_score FROM cdu_user_progress 
WHERE cdu_user_progress.uid = 145 
GROUP BY lesson_id 
+0

Вы не попробовали SUM (оценка), то? – Rob

+0

Какую базу вы используете? –

+0

Выберите SUM (first_score) в качестве sum_first_scores из (ВЫБРАТЬ lesson_id, MIN (дата), оценка AS first_score FROM cdu_user_progress WHERE cdu_user_progress.uid = 145 GROUP BY lesson_id) – Mutant

ответ

0

Вы можете IDENTIF y первый балл как тот, где не существует более ранней записи. Затем просто возьмите сумму:

select sum(score) 
from edu_user_progress eup 
where cdu_user_progress.uid = 145 and 
     not exists (select 1 
        from edu_user_progress eup2 
        where eup2.uid = eup.uid and 
         eup2.lesson_id = eup.lesson_id and 
         eup2.date < eup.date 
       ); 

Это предполагает, что минимальная дата для идентификатора урока имеет только один балл.

+0

Аналитический SQL должен быть полезен для этого запроса: SUM (оценка) OVER (PARTITION by lesion_id ORDER BY date) – jbaliuka

+0

@jbaliuka. , , На самом деле существует много способов написать этот запрос, хотя это и не один из них. Окно/аналитические функции, безусловно, возможны. Вышеуказанное будет работать в наибольшем количестве баз данных (обратите внимание, что ОП не указала базу данных). –

+0

MySQL 7, но я не мог заставить ваш аналитический запрос работать: SELECT SUM (оценка) OVER (PARTITION by lesion_id ORDER BY date) FROM cdu_user_progress – user3241112

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