У меня есть запрос, переписанный для объединения таблиц, а не выполнения подзапросов, так как мне нужно просмотреть около 10 цифр, и у 10 подзапросов возникает небольшая проблема с производительностью.
Имена таблиц истолбцы изменены для простоты *
Запрос ранее сделал это:
SELECT t1.col1, t1.col2, t1.col3,
(SELECT COUNT(j1.j_id) FROM jointable1 as j1 WHERE t1.t_employee_id = j1.j_employee_id
AND t1.t_week_ending = j1.j_week_ending AND j1.j_reason <> 'DNC') as col4,
(SELECT COUNT(j2.j_id) FROM jointable1 as j2 WHERE t1.t_employee_id = j2.j_employee_id
AND t1.t_week_ending = j2.j_week_ending) as col5
FROM table1 as t1
GROUP BY t1.col1, t1.col2, t1.col3;
Я переписал это так:
SELECT t1.col1, t1.col2, t1.col3, COUNT(j1.j_id) as col4, COUNT(j2.o_id) as col5
FROM table1 as t1
LEFT JOIN jointable1 as j1 ON (t1.t_employee_id = j1.j_employee_id
AND t1.t_week_ending = j1.j_week_ending)
AND j1.j_reason = <> 'DNC'
GROUP BY t1.col1, t1.col2, t1.col3;
Проблема в том,что значения, которые возвращаются для col4 и col5 в верхнем примере, в порядке.Допустим, они возвращают 7 и 8.
+------+------+------+------+--+
| col1 | col2 | col3 | col4 | |
+------+------+------+------+--+
| 1 | 0 | 0 | 34 | |
| 0 | 3 | 3 | 9 | |
| 7 | 1 | 0 | 2 | |
| 3 | 2 | 2 | 9 | |
| 4 | 1 | 0 | 4 | |
| 1 | 11 | 1 | 4 | |
| 5 | 2 | 5 | 21 | |
| 2 | 3 | 0 | 3 | |
| 2 | 3 | 0 | 2 | |
+------+------+------+------+--+
Но в нижнем запросе они возвращаются в квадрате или умножаются на себя.Таким образом, 7 становится 49, а 8 становится 64.
+------+------+------+------+--+
| col1 | col2 | col3 | col4 | |
+------+------+------+------+--+
| 1 | 0 | 0 | 1156 | |
| 0 | 3 | 3 | 81 | |
| 7 | 1 | 0 | 16 | |
| 3 | 2 | 2 | 81 | |
| 4 | 1 | 0 | 16 | |
| 1 | 11 | 1 | 16 | |
| 5 | 2 | 5 | 441 | |
| 2 | 3 | 0 | 9 | |
| 2 | 3 | 0 | 4 | |
+------+------+------+------+--+
Я не могу сказать, является ли это ЛЕВОЕ СОЕДИНЕНИЕ или что-то отсутствует в функции GROUP BY, но любая помощь в исправлении будет большой, или любая помощь в переписывании в еще более эффективный способ была бы также полезной.