私は自分のDBにある都市の合計を返すクエリを持っています。MySQL concat UNION GROUP BY行の結果
私は次のことを紹介しています。1人の人が自分の住所を持つことができますが、自分の住所に関連付けることもできます。そして、私はその人がいる都市の総計を返したい。
私はすべての後
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
[OK]をクエリが、私は理解して少し複雑です。私は次のように受け取りたい
+---------+---------+-----------+
| 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