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

Zwei Fragen noch (bei mir kommt entweder boolean oder andere Fehler, ich glaub syntax-error)

Select blubb.i
,Name
From (Select i
,Count(*)
From (Select i1 As i
From foo
Union All
Select i2
From foo) bla
Group By i
Order By Count(*) Desc Limit 1) blubb
Left Join foo2
On blubb.i = foo2.i;

Bei i kommt sechs mal der gleiche Wert, also der Spaltenname rein?
2. müssen bla und blubb in Backticks umklammert werden? Die Tabellen und Spaltennamen funktionieren bei mir nur mit Backticks. Oder dürfen sie das gerade nicht?
 
Werbung:
Innen steht:

Code:
Select i1 As i
From foo
Union All
Select i2
From foo

Da wird von foo die Spalte i1 und dann die Spalte i2 abgefragt und via UNION ALL untereinander gebracht. Die Spalte heißt i und die Tabelle bla.

Davon wird nun i und die Anzahl je i ermittelt, sortiert nach der Anzahl absteigend mit Limit 1. Diese Tabelle heißt nun blubb und hat 2 Spalten: i und count. Diese Tabelle wird mit foo2 gejoint, über die Spalte i, die es in beiden Tabellen gibt. Du hast also außen 2 Tabellen, die beide eine Spalte i haben.
 
Weltklasse. Es funktioniert, vielen Dank!

Irgendwie stimmt jedoch die Sortierung nicht mit dem vorherigen Code, die die Anzahl ausgab überein.
Die Sortierung stimmt zwar, jedoch ist der jeweils zweithöchste Wert anders sortiert, da es mehrere zweithöchste Spaltengibt.

Wie bekomme ich die Anzahl in die selbe Tabelle bzw. mit der gleichen Sortierung des gejointen Codes?
 
Also beim jetzigen Code ist eine Spalte die zweithöchste. beim vorherigen Code, der die Häufigkeit des häufigsten Wert (ohne Join) angab ist dieselbe Spalte die sechsthöchste, weil der sechsthöchste Wert genauso groß ist, wie der zweithöchste
 
Die durch den sql befehl erstellte Tabelle hat 10 Zeilen (1-10). Eine Spalte davon ist Count i1, i2 mit den Werten 5,2,2,2,2,2,1,1,0,0 (Zeile 1,2,3...,8,9,10)
Der Code, der diese Spalte ausgeben konnte sortiert die Tabelle (nach Count) so: Zeile 1,2,3,4,5,6,7,8,9,10
(In Wirklichkeit nicht so schön geordnet, aber der Verständnis halber...)
Der neue Code, der von einer anderen Tabelle gejoint wird sortiert sie so: 1,6,5,2,3,4,7,8,10,9

Ob das jetzt exakt die Sortierungen sind, weiß ich nicht. auf jeden Fall sind sie unterschiedlich
 
Wie auch immer - den schwierigsten Teil der Frage hast du beantwortet und da komm ich jetzt schon irgendwie drauf.

Die Sortierungen von i der beiden Codes:
Code:
select blubb.i, name from (select i, count(*) from (select i1 as i from foo union all select i2 from foo) bla group by i order by count(*) desc limit 1) blubb left join foo2 on blubb.i=foo2.i;
und
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;

sind jedenfalls unterschiedlich. Die Spalte Count bzw. count as Anzahl, nach der in beiden Abfragen sortiert wird enthält den zweithöchsten Wert 5 mal. Somit gibt es für die Zeilen, die in der Spalte Count den zweithöchsten Wert haben verschiedene Ausgaben, welche Zeile den zweithöchsten Wert enthält. (Weil der sechsthöchste Wert genauso hoch ist, wie der zweit-, dritt-, viert- und fünfthöchste Wert. Du kannst ja eine Tabelle nicht eindeutig nach einer Spalte sortieren, in der Werte mehr als einmal vorkommen)
 
Zuletzt bearbeitet:
Code:
select *, blubb.i, name from (select i, count(*) from (select i1 as i from foo union all select i2 from foo) bla group by i order by count(*) desc limit 1) blubb left join foo2 on blubb.i=foo2.i;

Das Select * am Anfang hat gefehlt. Jetzt bekomme ich alle Spalten aus foo2 und auch die Count(*)-Spalte. Hätte ich gleich drauf kommen können :confused:

Vielen, vielen Dank, für die Vorarbeit
 
Werbung:
Zurück
Oben