php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.11.2011, 00:18  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard Unterabfrage ?

Hi

Folgende Tabelle:

Firma
Jahr
Quartal
Land
Umsatz

Jetzt will ich herausfinden, wieviel Firmen in welchem Jahr, Quartal, Land einen Umsatz größer 10.000 gemacht haben, wenn die Anzahl der betreffenden Firmen, die diese Bedingung erfüllen, größer 2 ist.

Code:
SELECT COUNT(*) as AnzahlFirmen, Jahr,Quartal,Land FROM tabelle WHERE Umsatz > 10000 GROUP BY Jahr,Quartal,Land
Nach meinem aktuellen Ansatz müsste ich die Ergebnismenge PHP-seitig durchlaufen und mir die rauspicken, wo AnzahlFirmen eben größer 2 ist.

Jetzt will ich das aber lieber mit einer Unterabfrage (bzw. datenbankseitig) lösen. Grob stelle ich mir das so vor:
Code:
SELECT * FROM (SELECT COUNT(*) as AnzahlFirmen, Jahr,Quartal,Land FROM tabelle WHERE Umsatz > 10000 GROUP BY Jahr,Quartal,Land ) WHERE AnzahlFirmen > 2
Ja, und da haperts dann. Ihr merkt schon, ich bin keine SQL-Leuchte. Die Fehlermeldung lautet Every derived table must have its own alias. Zwar bin ich des Englischen soweit mächtig, raffe aber trotzdem nicht, wie genau ich da den Alias angeben muss. Kann mir da mal jemand helfen?
__________________
Es ist schon alles gesagt. Nur noch nicht von allen.
drsoong ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.11.2011, 00:30  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von drsoong Beitrag anzeigen
Nach meinem aktuellen Ansatz müsste ich die Ergebnismenge PHP-seitig durchlaufen und mir die rauspicken, wo AnzahlFirmen eben größer 2 ist.
Warum nicht einfach die Query um eine entsprechende HAVING-Klausel erweitern?
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 16.11.2011, 00:35  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

Zitat:
Zitat von ChrisB Beitrag anzeigen
Warum nicht einfach die Query um eine entsprechende HAVING-Klausel erweitern?
Die Antwort ist einfach. Weil ich mich in SQL nicht gut genug auskenne.

Habe es angetestet, hat sofort geklappt. Danke.
__________________
Es ist schon alles gesagt. Nur noch nicht von allen.
drsoong ist offline   Mit Zitat antworten
Alt 16.11.2011, 09:14  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Um dir den Fehler dennoch zu erklären:
Zitat:
Zitat von drsoong Beitrag anzeigen
Every derived table must have its own alias.
Code:
SELECT * FROM (SELECT ... ) AS `virtuelle_tabelle` WHERE ...
Du selektierst damit aus einer "Tabelle" (die Ergebnismenge der geklammerten Abfrage) - also ähnlich, als würdest du einen Tabellennamen angeben kannst/musst du dahinter eben einen Alias (AS `virtuelle_tabelle`) angeben.
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 16.11.2011, 10:37  
Erfahrener Benutzer
 
Benutzerbild von drsoong
 
Registriert seit: 05.08.2008
Beiträge: 1.127
drsoong wird schon bald berühmt werden
Standard

@ G.Schuster:

Ja, danke. Das ist natürlich auch noch interessant zu wissen.

Habe das auch noch getestet. Klappt, dauert aber länger als HAVING Anzahl < 3.

Interessanterweise schummelt PHPMyAdmin bei der Geschwindigkeitsangabe. Laut PHPMyAdmin liegt die Differenz ca. bei 0,02 Sekunden. Tatsächlich sitze ich aber 4 Sekunden länger da und warte auf das Ergebnis der Unterabfragelösung.
__________________
Es ist schon alles gesagt. Nur noch nicht von allen.
drsoong ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mySQL Unterabfrage ? robertthomas Datenbanken 2 27.06.2011 11:05
[Erledigt] Sortieren nach berechnetem Feld in Unterabfrage Marvin75 Datenbanken 12 17.06.2011 14:57
MYSQL: Unterabfrage monk Datenbanken 10 18.04.2010 13:09
Unterabfrage nötig? mb72 Datenbanken 12 12.10.2009 11:02
Unterabfrage schwandl Datenbanken 2 21.06.2009 15:26
unterabfrage in mysql ohne exists und in php-newbie83 Datenbanken 3 22.02.2005 23:50
Unterabfrage in mySQL Datenbanken 11 20.01.2005 11:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
every derived table must have its own alias, sql anzahl größer 2, mysql abfrage umsat 2011 2012, fehler every derived table must have its own alias, every derived table must have its own alias unteranfrage, sql umsatz jahr in group by quartal, sql group anzahl \grösser 2\

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum