나는 내 DB에있는 도시의 합계를 반환하는 쿼리가 있습니다.MySQL concat UNION GROUP BY 행 결과
좋아 나를 소개 할 수 있습니다 : 한 사람이 자신의 주소를 가질 수 있지만, 그는 또한 주소가 자신의 직장 주소와 연관 할 수 있습니다. 그리고 나는 그 사람이있는 도시 전체를 돌려주고 싶다.
내가 결국
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 |
+---------+---------+-----------+
이 어떻게 나에게 원하는 값을 수행하기 위해 내 쿼리를 작성할 수 있습니다하지만 내 문제는 내가 것처럼 agrouped 아니에요 결과입니다. 감사합니다.
이 downvote 나에게 이유를 설명해주십시오. – workdreamer
주소 테이블에서 도시를 계산하면 어떨까요? // 나는 downvote하지 않았다 – ncank
@ i-joey 왜냐하면 나는 엔티티를 필터링하고 있기 때문이다. 그리고 난 결과가 필요합니다 – workdreamer