Verschachtelte sql Abfragen in php

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/verschachtelte_sql_abfragen_in_php_216320/page_1 - zur Vollversion wechseln!


Grent schrieb am 19.05.2010 um 17:21

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 schrieb am 19.05.2010 um 17:27

welche datenbank?


Lizardking schrieb am 19.05.2010 um 17:50

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


kleinerChemiker schrieb am 19.05.2010 um 18:43

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 schrieb am 20.05.2010 um 17:50

Zitat von Nico
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 schrieb am 21.05.2010 um 08:40

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 schrieb am 21.05.2010 um 12:32

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 schrieb am 21.05.2010 um 12:34

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.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026