У меня есть таблица, которая выглядит следующим образом:Conditionals и агрегаты по нескольким таблицам
`units`
+----+------+-------+---------------+-------+
| id | tech | jobID | city | units |
+----+------+-------+---------------+-------+
| 1 | 1234 | 8535 | San Jose | 3 |
| 2 | 1234 | 8253 | San Francisco | 4 |
| 3 | 1234 | 2457 | San Francisco | 5 |
| 4 | 1234 | 8351 | Mountain View | 8 |
+----+------+-------+---------------+-------+
и вид, который использует эти данные, чтобы сделать некоторые расчеты:
`total`
+----+--------+------+-------+
| id | name | tech | total |
+----+--------+------+-------+
| 1 | Dan | 1234 | 12 |
| 2 | Dan SF | 1234 | 12 |
+----+--------+------+-------+ ...
Моя проблема заключается в том, что я пытаясь подытожить количество единиц, завершенных в Сан-Франциско, и количество единиц, которые он сделал в другом месте (необходимо конкретно отслеживать, сколько единиц было завершено в СФ). Тем не менее, я не уверен, как это сделать в рамках выбранного запроса, и если вы посмотрите на мою текущую общую таблицу, вы увидите, что оба общих значения просто суммируют все единицы независимо от города.
Я хочу, чтобы получить следующее:
`total`
+----+--------+------+-------+
| id | name | tech | total |
+----+--------+------+-------+
| 1 | Dan | 1234 | 11 |
| 2 | Dan SF | 1234 | 9 |
+----+--------+------+-------+ ...
мне нужна помощь в написании моей ВЫБРАТЬ, потому что я не уверен в том, как использовать СЛУЧАЙ, чтобы получить желаемый результат. Я пробовал следующее:
SELECT otherTable.name AS name, units.tech AS tech,
(CASE WHEN City = 'SAN FRANCISCO' THEN SUM(units)
ELSE SUM(units)
) AS total
FROM units, otherTable
GROUP BY name
но ясно, что это не сработает, так как я не различаю между городами в двух агрегатах.
Любая помощь очень ценится.
EDIT: SELECT, запрос для моего текущего вида (с присоединиться к информации) выглядит следующим образом:
SELECT otherTable.name, units.tech, SUM(units.units)
FROM units
LEFT JOIN otherTable ON otherTable.tech = units.tech
GROUP BY name
Что касается otherTable, он просто связывает каждый тек ID с именем:
`otherTable`
+----+--------+------+-----------+
| id | name | tech | otherInfo |
+----+--------+------+-----------+
| 1 | Dan | 1234 | ...... |
+----+--------+------+-----------+
В запросе вы кросс соединения двух таблиц, поэтому каждое имя сочетается с каждым блоком. Но, по вашему мнению, вы показываете пользователю «Дэн SF» для «Сан-Франциско» и «Дэн» для других. Как так? Пожалуйста, покажите, как связаны две таблицы. Откуда вы знаете, что Дэн закончил подразделения? –
Извините, я обновил сообщение с информацией о соединении. – mathmorales
Хорошо, так что название «Dan SF» составлено. Используйте запрос pgreen2 'UNION ALL', а затем настроенные соединения. –