SELECT schachteln

Hallo,

Ich habe ein kleines Problem mit meinem MySQL-Server. Meines Erachtens ist
diese Abfrage richtig:

SELECT avg FROM (SELECT AVG(vote) AS avg, COUNT(*) AS count FROM votes GROUP
BY foto) AS t1 WHERE count>10 ORDER BY avg DESC, COUNT desc

Der MySQL-Server sagt dazu aber nur das:

#1064 - You have an error in your SQL syntax. Check the manual that
corresponds to your MySQL server version for the right syntax to use near
'SELECT AVG( vote ) AS avg , COUNT( * ) AS count FROM votes GROU

Ich wäre jedem sehr dankbar, der mir bei diesem Problem helfen kann, denn
ich weiß echt nicht mehr weiter.

Heiko
Heiko Richter [ Fr, 23 September 2005 07:32 ] [ ID #980010 ]

Re: SELECT schachteln

Heiko Richter wrote:
> Der MySQL-Server sagt dazu aber nur das:
>
> #1064 - You have an error in your SQL syntax. Check the manual that
> corresponds to your MySQL server version for the right syntax to use near
> 'SELECT AVG( vote ) AS avg , COUNT( * ) AS count FROM votes GROU

Welche MySQL Version?

Vermutung: du versuchst 4.1 Features (Subselects) in einer 4.0 oder
3.23 Installation?

--
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
Hartmut Holzgraefe [ Fr, 23 September 2005 09:01 ] [ ID #980014 ]

Re: SELECT schachteln

Heiko Richter wrote:
> Hallo,
>
> Ich habe ein kleines Problem mit meinem MySQL-Server. Meines Erachtens ist
> diese Abfrage richtig:
>
> SELECT avg FROM (SELECT AVG(vote) AS avg, COUNT(*) AS count FROM votes GROUP
> BY foto) AS t1 WHERE count>10 ORDER BY avg DESC, COUNT desc
>
> Der MySQL-Server sagt dazu aber nur das:
>
> #1064 - You have an error in your SQL syntax. Check the manual that
> corresponds to your MySQL server version for the right syntax to use near
> 'SELECT AVG( vote ) AS avg , COUNT( * ) AS count FROM votes GROU
>

Und? *Hast* Du das Manual gelesen? Was sagt es zu dieser SELECT-Syntax?
Christian Kirsch [ Fr, 23 September 2005 09:07 ] [ ID #980015 ]

Re: SELECT schachteln

Heiko Richter schrieb:
> Hallo,
>
> Ich habe ein kleines Problem mit meinem MySQL-Server. Meines Erachtens ist
> diese Abfrage richtig:
>
> SELECT avg FROM (SELECT AVG(vote) AS avg, COUNT(*) AS count FROM votes GROUP
> BY foto) AS t1 WHERE count>10 ORDER BY avg DESC, COUNT desc
>
> Der MySQL-Server sagt dazu aber nur das:
>
> #1064 - You have an error in your SQL syntax. Check the manual that
> corresponds to your MySQL server version for the right syntax to use near
> 'SELECT AVG( vote ) AS avg , COUNT( * ) AS count FROM votes GROU
>
> Ich wäre jedem sehr dankbar, der mir bei diesem Problem helfen kann, denn
> ich weiß echt nicht mehr weiter.
>
> Heiko
>
>

Hallo,
selbst wenn die Mysql-Version diesen Syntax unterstützt, funkioniert es
so nicht, denn, wenn wir uns das Selcet mal etwas vereinfacht anschauen:

SELECT avg FROM t1
WHERE count>10 ORDER BY avg DESC, COUNT desc

wird klar, dass die Spalte count garnicht vorhanden ist. Also wenn
dann

SELECT avg, count FROM (SELECT AVG(vote) AS avg, COUNT(*) AS count FROM
votes GROUP
> BY foto) AS t1 WHERE count>10 ORDER BY avg DESC, COUNT desc

Oder aber:

SELECT AVG(vote) AS avg, COUNT(*) as count FROM votes
GROUP BY foto
having count(*) > 10
ORDER BY avg DESC, COUNT desc

Dann braucht man keinen Innerselect, gell.

Michael
newsgroup [ Sa, 24 September 2005 08:48 ] [ ID #981413 ]

Re: SELECT schachteln

Michael König wrote:

>> SELECT avg FROM (SELECT AVG(vote) AS avg, COUNT(*) AS count FROM votes
>> GROUP BY foto) AS t1 WHERE count>10 ORDER BY avg DESC, COUNT desc
....
> selbst wenn die Mysql-Version diesen Syntax unterstützt, funkioniert es
> so nicht, denn, wenn wir uns das Selcet mal etwas vereinfacht anschauen:
>
> SELECT avg FROM t1
> WHERE count>10 ORDER BY avg DESC, COUNT desc
>
> wird klar, dass die Spalte count garnicht vorhanden ist.

Natürlich ist die Spalte vorhanden, da sie in der Derived Table
berechnet wird. Und ein sortieren nach einer Spalte, die nicht in der
Select-Liste auftaucht, geht laut Standard SQL auch.

Allerdings ist eine Spalte mit dem Namen AVG oder COUNT ziemlicher Unsinn.

> Also wenn dann
>
> SELECT avg, count FROM (SELECT AVG(vote) AS avg, COUNT(*) AS count FROM
> votes GROUP
> > BY foto) AS t1 WHERE count>10 ORDER BY avg DESC, COUNT desc
>
> Oder aber:
>
> SELECT AVG(vote) AS avg, COUNT(*) as count FROM votes
> GROUP BY foto
> having count(*) > 10
> ORDER BY avg DESC, COUNT desc
>
> Dann braucht man keinen Innerselect, gell.

Gibt aber eine zweite Spalte in der Ergebnismenge.
Ich hoffe ja, das der OP die Abfrage nur vereinfacht hat, da das
Ergebnis sonst ziemlich sinnfrei ist...

Dieter
dnoeth [ Sa, 24 September 2005 10:45 ] [ ID #981414 ]
Datenbanken » de.comp.datenbanken.mysql » SELECT schachteln

Vorheriges Thema: Doppelte Einträge löschen
Nächstes Thema: Verbindung übe Delphi