Не уверен, что делать!
Использование MySQL
Мне нужно отобразить общее количество поездок в час для определенного идентификатора оператора
Таким образом, общее количество поездок в час для идентификатора оператора «2» должно отображаться где-то как число «7». Это число «7» является суммой TripsPerHour.
SELECT S.routeid, S.operatorid, R.routeid, S.percentage * R.frequency/100 AS TripsPerHour
FROM route_split S, routes R
WHERE R.routeid = S.routeid
AND S.operatorid ='2';
+---------+------------+---------+--------------+
| routeid | operatorid | routeid | TripsPerHour |
+---------+------------+---------+--------------+
| 6 | 2 | 6 | 1.0000 |
| 12 | 2 | 12 | 4.0000 |
| 13 | 2 | 13 | 2.0000 |
+---------+------------+---------+--------------+
3 rows in set (0.00 sec)
Вам просто нужна агрегация SUM()
вместе с пунктом GROUP BY
SELECT S.operatorid, R.routeid,
SUM(S.percentage * R.frequency/100) AS TripsPerHour
FROM route_split S
JOIN routes R
ON R.routeid = S.routeid
GROUP BY S.operatorid, R.routeid
Если вам нужно только значение с operatorid=2
, добавьте
WHERE S.operatorid = 2
перед GROUP BY
например
SELECT R.routeid,
SUM(S.percentage * R.frequency/100) AS TripsPerHour
FROM route_split S
JOIN routes R
ON R.routeid = S.routeid
WHERE S.operatorid = 2
GROUP BY R.routeid
Обновление: вы можете добавить функцию окна SUM() OVER ()
при условии, что ваша версия БД 8.0+
, например
SELECT S.operatorid, R.routeid,
SUM(S.percentage * R.frequency/100) OVER () AS Total_TripsPerHour
FROM route_split S
JOIN routes R
ON R.routeid = S.routeid
WHERE S.operatorid = 2
Спасибо за комментарий, мне нужно иметь сумму TripsPerHour в качестве отдельного вывода.
Пожалуйста, @rowan333, не могли бы вы уточнить, что вы имеете в виду, редактируя вопрос, пожалуйста?
хорошо, какая версия MySQL DB @rowan333?
8.0.22 это версия
хорошо, тогда вы можете использовать оконную функцию, как я упоминал в ответе @ rowan333
Я получаю эту ошибку: ОШИБКА 1055 (42000): Выражение № 3 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец 'bus_network.S.percentage', который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode=only_full_group_by
ну, нам нужно удалить GROUP BY в этом случае @rowan333
Отлично! Спасибо за вашу помощь. Это именно то, что мне было нужно :)
Вы также можете использовать опцию WITH ROLLUP, чтобы получить общую сумму в виде отдельной строки:
SELECT S.operatorid, R.routeid,
SUM(S.percentage * R.frequency/100) AS TripsPerHour ) FROM
route_split S JOIN routes R
ON R.routeid = S.routeid GROUP BY S.operatorid, R.routeid WITH ROLLUP
Какой бы ответ вы ни выбрали, сделайте для него ОБЪЯСНЕНИЕ, прежде чем запускать его в производство.
Лучше уточнить, с какой базой данных SQL вы работаете, так как их синтаксис может различаться.