У меня есть запрос, чтобы вернуть мне общее количество городов в моей БД.
Хорошо, позвольте мне представить: один человек может иметь свой адрес, но у него также может быть адрес, связанный с его рабочим адресом. И я хочу вернуть общее количество городов, в которых находится человек.
Предположим, у меня есть
Pablo living in Lisbon but working in Porto
Jim living in Paris and working in Paris
May living in Lisbon and working in Paris
I have i should have a result like:
Paris - 3
Lisbon - 2
Porto - 1
В конце концов, мой запрос:
SELECT
entity_address.city as name,
entity_address.city as id,
COUNT(entity_address.city) as count_all
FROM `entities` LEFT JOIN enterprises_entities ON entities.id = enterprises_entities.entity_id
LEFT JOIN entities AS `enterprises` ON enterprises.id = enterprises_entities.enterprise_id
LEFT JOIN addresses as enterprise_address ON enterprise_address.id = enterprises_entities.address_id
LEFT JOIN addresses as entity_address ON entity_address.entity_id = entities.id
LEFT JOIN person_titles ON person_titles.id = entities.title_id AND entities.title_type = 'PersonTitle'
LEFT JOIN enterprise_activities ON enterprise_activities.id = enterprises.title_id AND enterprises.title_type = 'EnterpriseActivity'
LEFT JOIN positions ON entities.position_id = positions.id
WHERE enterprise_address.city != '' OR entity_address.city != ''
GROUP BY name
UNION
SELECT
enterprise_address.city as name,
enterprise_address.city as id,
COUNT(enterprise_address.city) as count_all
FROM `entities` LEFT JOIN enterprises_entities ON entities.id = enterprises_entities.entity_id
LEFT JOIN entities AS `enterprises` ON enterprises.id = enterprises_entities.enterprise_id
LEFT JOIN addresses as enterprise_address ON enterprise_address.id = enterprises_entities.address_id
LEFT JOIN addresses as entity_address ON entity_address.entity_id = entities.id
LEFT JOIN person_titles ON person_titles.id = entities.title_id AND entities.title_type = 'PersonTitle'
LEFT JOIN enterprise_activities ON enterprise_activities.id = enterprises.title_id AND enterprises.title_type = 'EnterpriseActivity'
LEFT JOIN positions ON entities.position_id = positions.id
WHERE enterprise_address.city != '' OR entity_address.city != ''
GROUP BY name
order by count_all DESC
LIMIT 5
Хорошо, запрос немного сложен, я понимаю. Но моя проблема в том, что результат не сгруппирован, как я:
+---------+---------+-----------+
| name | id | count_all |
+---------+---------+-----------+
| Lisbon | Lisbon | 5100 |
+---------+---------+-----------+
| Lisbon | Lisbon | 932 |
+---------+---------+-----------+
| Paris | Paris | 430 |
+---------+---------+-----------+
| Porto | Porto | 270 |
+---------+---------+-----------+
| Paris | Paris | 92 |
+---------+---------+-----------+
Я хотел бы получить как:
+---------+---------+-----------+
| name | id | count_all |
+---------+---------+-----------+
| Lisbon | Lisbon | 6032 |
+---------+---------+-----------+
| Paris | Paris | 512 |
+---------+---------+-----------+
| Porto | Porto | 270 |
+---------+---------+-----------+
| London | London | 80 |
+---------+---------+-----------+
| Berlin | Berlin | 10 |
+---------+---------+-----------+
Как я могу написать свой запрос, чтобы выполнить мне нужные значения.
Спасибо!