Комплект
+------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra +------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment | protocol | varchar(100) | YES | UNI | NULL | | detail_service | varchar(120) | YES | | NULL | | date_conclusion | date | YES | | NULL | | resp_key | varchar(10) | YES | MUL | NULL | |------------------+--------------+------+-----+---------+----------------+
док
+---------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL |auto_increment | employee_key | varchar(10) | YES | MUL | NULL | | doc_total | int(11) | YES | | NULL | | date_doc | date | YES | | NULL | +---------------------+-------------+------+-----+---------+----------------+
SRV
+-------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra +-------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment | employee_key | varchar(10) | YES | MUL | NULL | | srv_total | int(11) | YES | | NULL | | date_srv | date | YES | | NULL | +-------------------+--------------+------+-----+---------+----------------+
key_e
+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| key | varchar(10) | NO | PRI | NULL | |
| login_employee | varchar(100) | YES | MUL | NULL | |
+-------------------+--------------+------+-----+---------+-------+
наемный рабочий
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| login | varchar(100) | NO | PRI | NULL | |
| name | varchar(100) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
У меня есть эти 5 таблиц. Я хочу получить результат, подобный этим полям:
employee.login, employee.name, SUM(kit.detail_service LIKE '%Deal%') AS 'Deal', SUM(kit.detail_service LIKE '%Not Deal%') AS 'Not Deal', SUM(kit.detail_service LIKE '%Postponed%') AS 'Postponed',
СУММ (doc.doc_total) КАК 'DOC', СУММ (srv.srv_cheque) КАК 'SRV'
key_e.k: Внешний ключ к employee.login kit.resp_key: Внешний ключ для key_e doc.employee_key / srv.employee_key: Внешний ключ для key_e (оба эти 2 равны, но отличаются от kit.resp_key)
Я сделал запрос:
SELECT
e.login,
e.name,
(SELECT SUM(k.detail_service LIKE '%Deal%') FROM kit k WHERE k.resp_key=key_e.key) AS 'Deal',
(SELECT SUM(k.detail_service LIKE '%Not Deal%') FROM kit k WHERE k.resp_key=key_e.key) AS 'Not Deal',
(SELECT SUM(k.detail_service LIKE '%Postponed%') FROM kit k WHERE k.resp_key=key_e.key) AS 'Postponed',
(SELECT SUM(doc_total) FROM doc WHERE doc.employee_key=key_e.key) AS 'DOC',
(SELECT SUM(srv_total) FROM srv WHERE srv.employee_key=key_e.key) AS 'SRV'
FROM
employee e
INNER JOIN key_e ON
e.login = key_e.login_employee
GROUP BY e.login, key_e.key
========================================
Запрос, который я сделал, возвращает мне почти все, что я хочу, кроме дублированных строк. Поскольку ключ KIT и ключ SRV и DOC различны, результат повторяется. Я не знаю, как присоединиться к строке с ключом SRV и ключом DOC с ключом KIT. Структура довольно запутанная, и, возможно, использование «соединения» решит эту проблему, но я не знаю, как это сделать. Я сделал несколько запросов, используя 'join', а не этот внутренний выбор, но пока безуспешно






Я думаю, вам нужно два уровня агрегирования. В частности, вы хотите агрегировать на ключевом уровне перед, выполняя соединения. Затем вы хотите агрегировать на уровне входа в систему:
SELECT e.login, e.name,
SUM(kit.num_Deal) as num_Deal,
SUM(kit.num_not_deal) as num_not_deal,
SUM(kit.num_Postponed) as num_Postponed,
SUM(doc_total) as doc_total,
SUM(srv_total) as srv_total
FROM employee e INNER JOIN
key_e ON
ON e.login = key_e.login_employee LEFT JOIN
(SELECT doc.employee_key, SUM(doc.doc_total) as doc_total
FROM doc
GROUP BY doc.employee_key
) doc
ON doc.employee_key = key_e.key LEFT JOIN
(SELECT srv.employee_key, SUM(srv.srv_total) as srv_total
FROM srv
GROUP BY srv.employee_key
) srv
ON srv.employee_key = key_e.key LEFT JOIN
(SELECT kit.employee_key,
SUM(k.detail_service LIKE '%Deal%') as num_Deal,
SUM(k.detail_service LIKE '%Not Deal%') as num_not_deal,
SUM(k.detail_service LIKE '%Postponed%') as Postponed
FROM kit k
GROUP BY kit.employee_key
) kit
ON kit.resp_key = key_e.key
GROUP BY e.login, e.name
спасибо Гордон. Спасибо за ответ, который отлично работает, и спасибо, что отредактировали мой вопрос, что он не был отформатирован