У меня есть три таблицы, каждая из которых 1: n. Запись в таблице1 имеет n записей в таблице2 и так далее. Давайте назовем их автомобилями, колесами и винтами для иллюстрации.
Винты могут быть чистыми (1) или ржавыми (2). Я соединяю их вместе, потому что хочу сосчитать две вещи. Во-первых, я хочу, чтобы ряды сообщали мне, сколько хороших / плохих винтов на колесо у меня есть для каждой машины. Так что в основном я получаю:
car_id wheel_id screw_state count(screws)
1 1 1 3
1 1 2 7
1 2 1 5
1 2 2 3
2 1 1 1
... and so on...
Теперь мне нужен второй факт, а именно, сколько ржавых и чистых винтов у меня есть для всех колес на автомобиль, без необходимости знать каждое конкретное число на колесо.
Так что теперь я просто оставляю GROUP BY над wheel_id, вот так:
car_id screw_state count(screws)
1 1 8
1 2 10
2 1 1
... and so on...
Дело в том, что мне нужно было бы их обоих в одном запросе, потому что в противном случае мне нужно было бы много сортировать и переупорядочивать.
Я полагаю, что второй, более легкий подсчет общего количества винтов на машину следует выполнять как подзапрос, но можно ли легко присоединиться к первому, более крупному запросу с подзапросом?
Как это сделать?
Я был бы рад получить довольно конкретные ответы, потому что я на самом деле не волшебник SQL.
edit : Я работаю над ORM, поэтому в стиле фанк, как показано ниже (взлом значений col для некоторой константы), не может быть там легко реализован. Я должен заставить это решение работать там, так что JOIN / subquery / UNIONs без прикольных обходных путей были бы хороши.