До того, как я начал, я не видел этого раньше, и это не выглядит ужасно понятным способом подвести итоги.
Хорошо, вот запрос из учебника:
SELECT a1.Name, a1.Sales, SUM(a2.Sales) Running_Total
FROM Total_Sales a1, Total_Sales a2
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
GROUP BY a1.Name, a1.Sales
ORDER BY a1.Sales DESC, a1.Name DESC;
И образец вывода
Name Sales Running_Total
Greg 50 50
Sophia 40 90
Stella 20 110
Jeff 20 130
Jennifer 15 145
John 10 155
Простая часть этого запроса отображает данные о продажах для каждого сотрудника. Все, что мы делаем, это выбираем name
и sales
у каждого сотрудника и упорядочиваем их по сумме продажи (по убыванию). Это дает нам наш базовый список.
Теперь для промежуточного итога мы хотим, чтобы каждая строка уже отображалась. Итак, мы объединяем таблицу против себя, в каждой строке, которая уже была бы отображена:
WHERE a1.Sales <= a2.sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
Затем мы используем агрегатную функцию SUM
и группируем соответственно. Хороший способ понять это, если вы посмотрите, что произойдет, если вы не используете групповую функцию. Строка «София» будет выглядеть так:
Name A1.Sales A2.Sales
Sophia 40 50
Sophia 40 40
Заметьте, как мы получили продажи Грэга? Группа подведет итоги, и вуаля!
Надеюсь, это поможет. Джо