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

Das heißt, der JOIN muss in die andere Richtung stattfinden?

Die andere Tabelle soll gejoint werden, um durch das Ergebnis der ursprünglichen Abfrage die Zeile herauszufinden, in der ein anderer Wert steht, den ich haben will
 
Werbung:
Code:
SELECT * FROM `FOO2` INNER JOIN `FOO` ON `FOO2`.`COL 1` = `FOO`.`COL10`

Ich weiß, dass der Spaltenname COL1 oder COL10 ungünstig gewählt ist, aber das ist ja eigentlich nicht wichtig für meine Frage. In Wirklichkeit heißen sie anders und es ist nur das einfache Beispiel.

Statt FOO.COL10 (am Ende) will ich den Wert haben, der sagen wir mal in den Spalten COL10 bis COL15 am häufigsten vorkommt (also das Ergebnis der Abfrage, die du mir gestern gezeigt hast)

Bisher haben wir den Wert, der in einer bestimmten Anzahl an Spalten am häufigsten vorkommt und wie häufig er vorkommt. Mit diesem Wert will ich eine andere Tabelle (FOO2) joinen.
 
Code:
test=*# select * from foo;
 i1 | i2
----+----
  1 |  2
  1 |  3
  2 |  1
  3 |  4
(4 rows)

Time: 0,157 ms
test=*# select * from foo2;
 i | name
---+-------
 1 | name1
 2 | name2
 3 | name3
(3 rows)

Time: 0,150 ms
test=*# 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; i | count
---+-------
 1 |  3
(1 row)

Time: 0,325 ms
test=*# 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;
 i | name
---+-------
 1 | name1
(1 row)
 
Formatierung macht das ganze wohl etwas ersichtlicher?
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;
 
Formatierung macht das ganze wohl etwas ersichtlicher?
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;

Ja macht es definitiv aber
aber für jeweils welches? bla steht für foo und blubb steht für foo2?
i, i1 und i2 stehen jeweils für die Spaltennamen der Tabellen?

Ich meine, ich werde in meinem Code nicht foo oder foo2 schreiben, sondern die Tabellennamen.

Was jedoch schreibe ich für bla und blubb?
Ich bin mir nicht sicher, ob es auch jeweils die Tabellennamen sind oder neue Aliase, die ich wählen kann, wie ich will. Ich denke zweiteres? Was schreibe ich bei SELECT i oder GROUP BY i? Nur den Spaltennamen? Oder den Tabellennamen vorangestellt?
 
Werbung:
Zurück
Oben