2016-04-21 6 views

Antwort

1

Dann links beitreten B auf A und Active = 1 Bedingung in der Join-Klausel und Gruppe nach Stadt enthalten.

select a.city, count(b.city) as cnt 
from a 
left join b on a.id=b.city and b.active=1 
group by a.id, a.city 
order by count(b.city) desc 
+0

Dies funktioniert, und es ist schnell! Danke – Benidorm

2

können Sie beide Abfragen versuchen und vergleichen Leistung

select a.city, count(*) as cnt 
from cities as a 
left join 
trips as b 
on (a.id = b.city and b.active=1) 
group by a.city 
order by 2 desc 

oder

select 
    a.city, 
    (select count(*) from trips as b where a.id = b.city and b.active=1) as cnt 
from cities as a 
order by 2 desc 
+0

Danke! Das funktioniert, aber ich möchte alle Städte bekommen, aber Städte ohne aktive Reisen an der Unterseite zeigen. Mit dieser Abfrage bekomme ich nur die Städte mit aktiven Reisen. – Benidorm

+0

Ja, das ist der springende Punkt von b.active = 1. Sie ziehen speziell Reisen, die als aktiv gekennzeichnet sind. Das ist, weil Sie gefragt haben, "... zeigen Sie in Tabelle B, wenn aktiv 1 ist." – Dresden

+1

@Benidorm für die erste Abfrage Ich habe aktualisiert, um links Join zu verwenden, dies wird alle Städte zeigen, zweite Abfrage zeigt alle Städte standardmäßig –

Verwandte Themen