Verschachtelte sql Abfragen in php
Grent 19.05.2010 - 17:21 1603 7
Grent
Big d00d
|
Ich mathematisch leider etwas überfordert. Ich habe eine Tabelle mit 2 Spalten. In etwa so: A | 0 B | 0 A | 1 A | 2 B | 0 A | 5 Ich bräuchte nun eine Abfrage, die mir ausgibt, welcher Wert in Spalte 1 am öftesten den Wert 0 in Spalte 2 hat (wäre dann also B), sowie eine die mir sagt, welcher Wert in Spalte 1 am öftesten den Wert 1 oder 2 in Spalte 2 hat (wäre dann also A). Vielleicht weiß jemand etwas auf den schnellen Blick. Ich hoffe, dass mir die Lösung für oben auch den entscheidenden Hinweis für den Ansatz eines (für mich) noch komplexeren Problems bringt: A | 0 | 1 B | 5 | 1 A | 2 | 4 Und zwar hätte ich gern die größte Summe von Spalte 2 und 3 mit dem selben Wert in Spalte 1. Das wäre also 7 (bei A; nur 6 bei B). Von Disctinct über Group by von sum über max ... ich komm einfach nicht drauf. Leider hab ich Probleme mit diesen doppelten, verschachtelten Abfragen. Vielen Dank!
|
Nico
former person of interest
|
welche datenbank?
|
Lizardking
Big d00d
|
hi, versuch mal folgendes:
Bsp 1 SELECT field_1, count(*) FROM table_1 WHERE field_2='0' GROUP BY field_1 ORDER BY count(*) DESC LIMIT 1
Bsp 2 SELECT field_1, sum(field_2+field_3) FROM table_2 GROUP BY field_1 ORDER BY sum(field_2+field_3) DESC LIMIT 1
hth
Bearbeitet von Lizardking am 19.05.2010, 17:58
|
kleinerChemiker
Here to stay
|
Falls ich Bsp.2 richtig verstanden habe, dann wäre eher das die Lösung.
SELECT field_1, count(*) FROM table_1 WHERE field_2 IN(1,2) GROUP BY field_1 ORDER BY count(*) DESC LIMIT 1
|
Grent
Big d00d
|
welche datenbank? Sorry, ich meinte mysql. @Lizardking & kleinerChemiker Vielen Dank!! Habe alle drei Code-Schnipsel einbauen und daraus lernen können. Genau, was ich gebraucht habe.
|
Lizardking
Big d00d
|
na freut mich Vielleicht ist das auch die richtige Stelle für einen Exkurs, ich hätte da nämlich eine kleine Zusatzfrage: Weiß jemand, ob die folgenden 2 Schnipsel einen Performanceunterschied machen? 1) SELECT sum(f_1, f_2) FROM tbl ORDER BY sum(f_1, f_2) 2) SELECT sum(f_1, f_2) as my_sum FROM tbl ORDER BY my_sum Die konkrete Frage ist, ist 1) langsamer, weil die Summe 2x gebildet werden muss oder ist MySQL so schlau und macht implizit das was bei 2) steht? Im Normalfall wird's keinen Unterschied machen, interessant fände ich's trotzdem. LGL
|
watchout
Legendundead
|
Ich weiss es nur für 1-parametrische funktionen also zb. SELECT abs(f_1) ... hier wär 2. schneller, weil bei 2. der index fürs ORDER BY verwendet wird und bei 1 nicht. Und daher vermut ich mal vorsichtig dass auch solche subsitutionen nicht automatisch gemacht werden
|
meepmeep
Here to stay
|
ich vermute dass es wurscht is, weil der optimizer das ausbügelt und am ende der selbe ausführungsplan rauskommt.
du könntest aber schaun ob du mit "explain [select statement]" auf eine antwort kommst.
|