Wie finden Sie die maximale Anzahl durch die Verwendung von mysql?
Bitte lassen Sie mich wissen, was falsch ist mit dem nachstehenden Befehl
mysql> select max(count(*)) from emp1 group by name;
ERROR 1111 (HY000): Invalid use of group function
- Ich nehme an, dass es mehrere Zeilen in der Tabelle, wo
name
hat den gleichen Wert. Er will diename
mit der größten Anzahl von Zeilen. - Versuchen Sie zu zählen, die
name
und dann erst wieder die höchste Anzahl? - Sie können Aggregat ein Aggregat innerhalb des gleichen Bereichs
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
SELECT NAME, COUNT(*) as c FROM table GROUP BY name ORDER BY c DESC LIMIT 1
Aus der mitgelieferten code-ich verstehe, dass Sie möchten, wählen Sie die höchste Anzahl der Mitarbeiter, die denselben Namen haben.
Versuchen Sie dies:
...oder so:
Beide Abfragen das gleiche Ergebnis zurückgeben, aber Ihre Implementierungen sind unterschiedlich.
Verwenden, je nachdem, welcher ist der Schnellste für Sie oder je nachdem, was Sie bevorzugen.
Ich würde zu der folgenden (vorausgesetzt ich verstehe richtig, was Sie wollen):
Dieser wählt die größte Anzahl von allen Anklagepunkten von Namen. Zum Beispiel, wenn Ihre Tabelle enthält
Den inneren wählen würde erstellen Sie eine "Tabelle" mit diesen Daten
Dem äußeren wählen würde, um dieses durch
c
absteigend, und wählen Sie den ersten Eintrag, der ist3
.Diese kann verkürzt werden, um
Euch Fragen: "was ist falsch mit Ihrer Aussage". Dies ist Ihre Anweisung:
Ich verstehen, was du meinst. Aber eine SQL-Compiler nicht. Der Grund ist einfach. Einer gegebenen
select
kann nur einegroup by
- Klausel. Und Ihre Abfrage aufgefordert werden, für die zwei von Ihnen. Die erste ist diegroup by
Namen. Die zweite ist eine aggregation über alle Ergebnisse.Die richtige Art und Weise zu schreiben, Ihre Anfrage (wie Sie scheinen zu wollen) ist mit einer Unterabfrage:
Dies ist eine vollkommen angemessene Lösung, die nur verwendet standard-SQL. Andere Antworten haben vorgeschlagen, die Lösung mit den
limit
Klausel, die vielleicht ein bisschen effizienter.Nur gehören die Namen in der select-Anweisung, um der Gruppe durch.
Lesen Sie über die Group-Funktion hier...geben Sie den link-Beschreibung hier
Müssen Sie
name
zu group by es, dann verwenden Siemax()
auf das Ergebnis, dass als Unterabfrage:Habe ich formatiert die Abfrage, so können Sie sehen, was passiert, anstatt es alles auf einer Linie, wie Sie es zeigten. Btw die "x" er fnf ist ein erforderliches alias für die Unterabfrage.