Zähle den höchsten Wert (Count(MAX))

alexfrenzel92

SQL-Guru
Beiträge
122
Guten Abend

Ich möchte in einer Abfrage zählen, wie häufig der höchste Wert in einer Spalte (gegebenenfalls in mehreren ausgewählten Spalten) vorkommt. Gegebenenfalls auch, wie oft der zweithöchste Wert in TABELLE1 vorkommt.

$sql = 'SELECT COUNT(SELECT MAX(`SPALTE1`) FROM `TABELLE1`) FROM `TABELLE1`';

Ich bekomme nur einen Boolean ('mysql_fetch_row() expects parameter 1 to be resource, boolean given in'...)

Kann mir jemand helfen?
Grüße
Alex
 
Werbung:
Du fragst nach dem größten Wert. Da bekommst 1 Zeile. Dann zählst die Anzahl der Zeilen.

Was Du wohl willst: den größten Wert ermitteln, und dann schauen, wie oft dieser vorkommt, also

select count(1) from table where column = (select max(column) from table);
 
Was Du wohl willst: den größten Wert ermitteln, und dann schauen, wie oft dieser vorkommt, also

Ich will den Wert ermitteln, der am häufigsten vorkommt. Ich habe 'den größten Wert' geschrieben, meinte aber den Wert, der in mehreren ausgewählten Spalten am häufigsten vorkommt. Den Wert will ich in diesen Spalten zählen. 'Max' müsste dann der falsche Ausdruck dafür sein. Der Titel der Frage war von mir falsch gewählt
 
Zuletzt bearbeitet:
dann etwas wie :

select i, count(1) from foo group by i order by count(1) desc limit 1;

Wenn Du das von mehreren Spalten haben willst dann könntest Du vorher via UNION ALL die einzelnen Spalten erst einmal in eine bringen und darüber dann so arbeiten. Vorher fragst Du Dich aber, ob Dein Tabellendesign nicht für die Tonne ist.
 
Das zeigt mir jetzt den Wert an, der am häufigsten vorkommt. Ich möchte wissen, wie häufig der häufigste Wert vorkommt.

Wie funktioniert das mit Union All? An welche(r/n) Stelle(n) muss Union All in diesem Fall stehen?
 
Du hast:

Code:
test=*# select * from foo;
 i | j
---+---
 1 | 4
 2 | 1
 3 | 1
 2 | 3
(4 rows)

Du suchst 1, weil die 3 mal vorkommt, oder?

Code:
test=*# select i, count(1) as anzahl  from (select i from foo union all select j from foo) blubb group by i order by anzahl desc limit 1;
 i | anzahl
---+--------
 1 |  3
(1 row)
 
Noch was: An welcher Stelle in diesem Code platziere ich einen JOIN auf eine andere Tabelle foo2 derselben Datenbank?
Das Ergebnis der JOIN-Abfrage soll einen Wert in der gleichen Zeile abfragen, in dem das Ergebnis dieser Abfrage steht.
Oder muss dafür die komplette Abfrage umgeschrieben werden?
Code:
select i, count(1) as anzahl from (select i from foo union all select j from foo) blubb group by i order by anzahl desc limit 1;
 
wenn ich dich richtig verstehe nach dem schließenden Klammer zwischen blubb und group by, dazu dann noch das GROUP BY erweitern um die neue Spalte.
 
Code:
select i, count(1) as anzahl from (select i from foo union all select j from foo) blubb JOIN foo2 group by `foo2`.`j` order by anzahl desc limit 1;

So in etwa?
 
So?

Code:
select j, count(1) as anzahl from (select i from foo union all select j from foo) blubb JOIN foo2 ON foo.i = foo2.j group by foo2.jorder by anzahl desc limit 1;
 
Werbung:
Zurück
Oben