# COUNT() und MAX() in einer Abfrage



## Oli (14. Jan 2009)

Hallo,

ich habe eine Tabelle, da werden Maschinennummern und Fehlernummern eingetragen. 

Nun möchte ich wissen, welche Maschinennummer die meisten Fehler hat:


```
SELECT   COUNT (bde_fehlerlog.fehlernummer) AS anzahl,
         bde_fehlerlog.maschinennummer
    FROM bde_fehlerlog
GROUP BY (bde_fehlerlog.maschinennummer, bde_fehlerlog.fehlernummer);
```

Was ich möchte ist, jetzt nur die Maschinennummer mit den meisten Fehlern also ein Max() auf die obere Abfrage. Wie kann ich das in einem Statement formulieren?

Danke Oli


----------



## Ebenius (14. Jan 2009)

Bei Oracle sollte's so gehen... Wie das auf anderen Datenbanken aussieht, weiß ich nicht. 
	
	
	
	





```
SELECT * FROM (
  SELECT   COUNT (bde_fehlerlog.fehlernummer) AS anzahl, 
           bde_fehlerlog.maschinennummer 
      FROM bde_fehlerlog 
  GROUP BY (bde_fehlerlog.maschinennummer, bde_fehlerlog.fehlernummer)
  ORDER BY COUNT (bde_fehlerlog.fehlernummer) DESC
) WHERE ROWNUM = 1;
```

Ebenius


----------



## Oli (14. Jan 2009)

Sortieren und nur die erste Zeile zurückliefern lassen?
Cool, danke für den Tipp

Grüße Oli


----------



## musiKk (14. Jan 2009)

Sieht etwas unsauber aus. Ich würde statt dem äußeren select ein LIMIT 1 verwenden.


----------



## Ebenius (14. Jan 2009)

musiKk hat gesagt.:
			
		

> Sieht etwas unsauber aus. Ich würde statt dem äußeren select ein LIMIT 1 verwenden.



Dazu sagt mir der erste Google-Treffer: 
	
	
	
	





```
// mysql
select col from tbl limit 20;

// Oracle
select col from tbl where rownum<=20;

// Microsoft SQL
select top 20 col from tbl;
```

Und das äußere SELECT ist bei Oracle unerlässlich, sonst nimmt sich Oracle die erste Zeile und danach wird diese eine Zeile dann sortiert. Glaub mir.  Oder Ask Tom.

Ebenius


----------



## musiKk (14. Jan 2009)

Ich habe eh keinen Zugriff auf eine Oracle DB, da muss ichs dir wohl glauben.  Seltsam kommts mir trotzdem vor. Ich hab nur in der PostgreSQL Doku gelesen und da kams mir so vor, als sei LIMIT exakt für sowas da:


> When using LIMIT, it is a good idea to use an ORDER BY clause that constrains the result rows into a unique order. Otherwise you will get an unpredictable subset of the query's rows — you might be asking for the tenth through twentieth rows, but tenth through twentieth in what ordering? You don't know what ordering unless you specify ORDER BY.



Anyway... der Threadersteller hat auch keine Datenbank angegeben und offenbar hats ja schon funktioniert.


----------

