Zurück   klamm-Forum > Virtual World > Programmierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21.09.2011, 14:15:49   #1 (permalink)
schwankend^^

ID: 215354
Lose-Remote
Reallife

Reg: 22.05.2006
Beiträge: 1.505
Gsus ist einfach richtig nettGsus ist einfach richtig nettGsus ist einfach richtig nettGsus ist einfach richtig nett
Standard SQL Problem

Hallo,

ich habe heute von der Uni aus eine Aufgabe bekommen, in der es darum geht, aus folgender Tabelle:
PRES_NAMEHOBBY
Adams J QBilliards
Adams J QSwimming
Adams J QWalking
Arthur C AFishing
Cleveland GFishing
Coolidge CFishing
Coolidge CGolf
Coolidge CIndian Clubs
Coolidge CMechanical Horse
Coolidge CPitching Hay
Eisenhower D DBridge
Eisenhower D DGolf
......
Das Hobby auszulesen, dass am meisten ausgeführt wird, zusammen mit den Namen der Presidenten, die dieses Hobby ausüben.

Mein Ansatz war nun der folgende:
Code:
1:
SELECT HOBBY, PRES_NAME FROM PRES_HOBBY GROUP BY HOBBY HAVING COUNT(*) = MAX(COUNT(*))
Dabei bekomme ich allerdings immer den Fehler: Nested aggregate functions are not allowed

Folgender Ansatz war das mit einem Subquery zu lösen:
Code:
1:
SELECT HOBBY, COUNT(*) FROM PRES_HOBBY H GROUP BY HOBBY HAVING COUNT(*) = MAX((SELECT COUNT(*) FROM PRES_HOBBY GROUP BY HOBBY))
Dabei kommt der Fehler: multiple rows in singleton select

An dieser Stelle komme ich leider nicht mehr weiter. Ich möchte keine Explizite Lösung zu dem Problem haben, da mir das beim lernen nicht wirklich weiter helfen würde, aber ein kleiner Anstoß, wie man dieses Problem lösen könnte wäre doch sehr hilfreich.

Vielen dank im Vorraus!

mfg
Gsus
Gsus ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 21.09.2011, 15:28:21   #2 (permalink)
alias Echnaton
Benutzerbild von transversalis

ID: 309239
Lose-Remote

Reg: 18.01.2008
Beiträge: 2.399
transversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehentransversalis genießt hohes Ansehen
Standard

hmm:

MAX((SELECT COUNT(*)
versuch mal
(SELECT (MAX COUNT(*))


allerdings könntest Du auch nach dem COUNT(*) absteigend sortieren und dann nur die erste Zeile berücksichtigen ( funktioniert aber nur, wenn es nicht zwei Hobbies gibt, die gleich häufig ausgeführt werden )





sowas könnte auch funktionieren:

Spoiler
"transversalis teleport" sprach der Magier und war fort

Geändert von transversalis (21.09.2011 um 15:42:31 Uhr)
transversalis ist offline   Mit Zitat antworten
Alt 21.09.2011, 19:31:03   #3 (permalink)
schwankend^^

ID: 215354
Lose-Remote
Reallife

Reg: 22.05.2006
Beiträge: 1.505
Gsus ist einfach richtig nettGsus ist einfach richtig nettGsus ist einfach richtig nettGsus ist einfach richtig nett
Standard

vielen Dank!

Das erste Statement liefert genau das gleiche Problem mit verschachtelten Funktionen, das zweite einen Error wegen dem FETCH, aber das dritte funktioniert! Leider kann das nicht unbedingt die richtige antwort sein, weil wir den INNER JOIN noch nicht behandelt haben, und das eine Reflexionsaufgabe gewesen sein soll aber nunja

Vielen Dank auf jeden Fall für deine Hilfe!

mfg
Gsus
Gsus ist offline Threadstarter   Mit Zitat antworten
Alt 21.09.2011, 20:04:42   #4 (permalink)
Xot
-

ID: 413078
Lose-Remote

Reg: 26.11.2006
Beiträge: 442
Xot ist jedem bekanntXot ist jedem bekanntXot ist jedem bekanntXot ist jedem bekanntXot ist jedem bekanntXot ist jedem bekannt
Standard

Evtl keine schöne Lösung aber klappt
PHP-Code:
1:
SELECT hobbyGROUP_CONCAT(pres_name), COUNT(*) FROM pres_hobby GROUP BY HOBBY ORDER BY COUNT(*) DESC 
Xot ist offline   Mit Zitat antworten
Alt 21.09.2011, 20:12:21   #5 (permalink)
schwankend^^

ID: 215354
Lose-Remote
Reallife

Reg: 22.05.2006
Beiträge: 1.505
Gsus ist einfach richtig nettGsus ist einfach richtig nettGsus ist einfach richtig nettGsus ist einfach richtig nett
Standard

Zitat:
Zitat von Xot Beitrag anzeigen
Evtl keine schöne Lösung aber klappt
PHP-Code:
1:
SELECT hobbyGROUP_CONCAT(pres_name), COUNT(*) FROM pres_hobby GROUP BY HOBBY ORDER BY COUNT(*) DESC 
zumindest bei MySQL Darum gehts hier aber leider nicht, es gab nur kein reines SQL bei der Präfix-Auswahl

Dynamic SQL Error
SQL error code = -804
Function unknown
GROUP_CONCAT

Da aber auch kein anderer Mitstudent diese Aufgabe lösen konnte mit den Mitteln die wir kennen, werde ich diese Aufgabe einfach mal so stehenlassen und schauen was mein Dozent morgen dazu zu sagen hat

Trotzdem vielen Dank für den Versuch!

mfg
Gsus
Gsus ist offline Threadstarter   Mit Zitat antworten
Alt 22.09.2011, 00:26:46   #6 (permalink)
* {display:none;}

ID: 178362
Lose-Remote

Reg: 04.06.2006
Beiträge: 322
Graccem sorgt für eine eindrucksvolle AtmosphäreGraccem sorgt für eine eindrucksvolle AtmosphäreGraccem sorgt für eine eindrucksvolle Atmosphäre
Standard

Wenn ich dich nicht total falsch verstanden habe, ist das dein Query, den du suchst.

PHP-Code:
1:
SELECT PRES_NAMEHOBBY FROM pres_hobby WHERE HOBBY = (SELECT HOBBY FROM pres_hobby  GROUP BY HOBBY ORDER BY count(*) DESC LIMIT 1
bzw. wenn ihr HAVING schon hattet, dann wäre

PHP-Code:
1:
2:
3:
4:
5:
SELECT PRES_NAMEHOBBY FROM pres_hobby WHERE HOBBY IN (
  
SELECT HOBBY FROM pres_hobby GROUP BY HOBBY HAVING count(*) >= (
    
SELECT count(*) FROM pres_hobby GROUP BY HOBBY ORDER BY count(*) DESC LIMIT 1
  


besser, weil er dann alle Treffer listen kann.

Geändert von Graccem (22.09.2011 um 02:21:20 Uhr)
Graccem ist offline   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[JS] Problem MaxFleit Programmierung 8 26.12.2008 10:47:24
W-Lan Problem Lars2007De Netzwerktechnik 4 23.11.2007 17:42:01
Problem bei Pc->Tv krisch0rn Sonstiges 5 05.10.2006 11:41:33
Problem gelöst :) kleenes mysql problem (auslesen) Rene Programmierung 0 17.09.2006 14:35:39


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25:26 Uhr.