172 похожих чатов

Всем привет. Есть таблица Users в отношении с другими таблицами

(Run, Ride, Swim, etc)
Стоит задача одним запросом вытащить всех Users и к каждому юзеру прикрепить сумму километров из таблиц с отношениями
Но запрос ниже не работает со всеми вместе, ибо с каждым джоином повторяющихся данных все больше и больше
Как можно решить эту проблему?
SELECT
"user"."id",
"user"."name",
SUM("run"."km") AS "run_km",
SUM("ride"."km") AS "ride_km",
SUM("swim"."km") AS "swim_km"
FROM "user"
LEFT JOIN "run"
ON "user"."id" = "run"."userId"
LEFT JOIN "ride"
ON "user"."id" = "ride"."userId"
LEFT JOIN "swim"
ON "user"."id" = "swim"."userId"
GROUP BY "user"."id»

2 ответов

9 просмотров

SELECT "user"."id", "user"."name", "sum_run"."km" AS "run_km" FROM "user" LEFT JOIN (select "run"."userId", sum("run"."km") AS "km" from "run" group by "run"."userId" ) AS "sum_run" ON "user"."id" = "sum_run"."userId" с другими таблицами аналогично поступить

Или же использовать "каскад" группировок: WITH user_runs AS ( SELECT "user".id, "user".name, SUM(run.km) AS run_km FROM "user" LEFT JOIN run ON "user".id = run.userId GROUP BY "user".id ), user_runs_rides AS ( SELECT user_runs.id, user_runs.name, user_runs.run_km, SUM(ride.km) AS ride_km FROM user_runs LEFT JOIN ride ON ride.userId = user_runs.id GROUP BY user_runs.id, user_runs.name, user_runs.run_km ), ... Или просто подзапросы: SELECT "user".id, "user".name, (SELECT SUM(run.km) FROM run WHERE run.userId = "user".id) AS run_km, (SELECT SUM(ride.km) FROM ride WHERE ride.userId = "user".id) AS ride_km, ... FROM "user"

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта