2016-07-14 8 views
0

Ich habe eine Anforderung, wo ich eine SELECT-Abfrage mit einer WHERE-Klausel und einer Gruppe durch ausführen möchte. Es gibt nur wenige Zeilen aus, aus denen ich die Zeilen auswählen möchte, die am wenigsten sind.SELECT-Abfrage zur Auswahl basierend auf der Anzahl der Zeilen

Beispiel:

table t1: 
host_name application type 
host1  app1   0 
host2  app2   0 
host3  app4   0 
host1  app5   0 
host2  app6   0 
host1  app7   1 
host2  app8   1 

In der obigen Tabelle möchte ich den Host bekommen, die am wenigsten belastet ist.

host1 läuft app1, app5, app7.

host2 läuft app2, app6, app8.

host3 läuft nur app4.

so Host3 ist am wenigsten geladen. Wenn ich die Abfrage ausführe, sollte die Ausgabe "host3" sein. Zeilen von type=0 müssen nur ausgewählt werden.

Ich habe eine Lösung. Aber ist es optimiert? Gibt es einen optimalen Weg dies zu erreichen?

SELECT host_name from (SELECT host_name, min(count) FROM (SELECT host_name, COUNT(*) as count FROM t1 where type=0 group by host_name) as Dup ORDER BY host_name); 

Vielen Dank im Voraus :)

+0

Sie immer 1 Zeile, die Sie brauchen? –

+0

Ja Ich brauche eine einzelne Zeile mit Hostnamen. –

Antwort

1

dies versuchen, wird es am wenigsten host nach Anzahl der apps zurück:

select `host_name` 
from t1 
where type = 0 
group by `host_name` 
order by count(`host_name`) ASC 
limit 0,1 
+0

Danke..Das hilft. –

+0

Dieser ist auch optimiert. Vielen Dank. –

Verwandte Themen