Re: Trouble with subqueries
От | Robert B. Easter |
---|---|
Тема | Re: Trouble with subqueries |
Дата | |
Msg-id | 0101192214380Q.02219@comptechnews обсуждение исходный текст |
Ответ на | Re: Trouble with subqueries (Jussi Vainionpää <jjvainio@cc.hut.fi>) |
Список | pgsql-sql |
Stuff like this is possible in 7.1: SELECT m.name, m.length, count(r.rating) AS fives FROM movies m LEFT JOIN (SELECT * FROM ratings WHERE rating = 5) AS r ON m.name = r.name GROUP BY m.name, m.length; I think that would work. You'd want to try different queries with EXPLAIN to see what looks best. > But I did find a solution: > SELECT movies.name, movies.length, > COUNT(CASE WHEN ratings.name=movies.name > AND rating='5' THEN true END) AS fives > FROM ratings, movies GROUP BY movies.name, movies.length; > > But I don't quite understand why I need to have movies.length in the GROUP > BY -clause? When doing a GROUP BY, you can only select grouped columns. You cannot select other columns (except in group aggregates) since there can be more than one possible value for them if the group has more than one row. The database can't know which row in the group from which to get the length field. If length is grouped, there is only one possible value for it in the whole group, so I knows what value to get (the only one). Group aggregates are allowed on the ungrouped columns (and the grouped columns too) since it is not ambiguous - not single value to trying to be selected. When you do a GROUP BY, your table is partitioned into blocks of rows where the GROUPed BY columns are the same for all rows in the group. Only one row can result from each group of a grouped table. Aggregate functions used in returning a group row from a grouped table are aggregates on the group returned by that row, not the whole (ungrouped) table. Hope that makes sense. -- -------- Robert B. Easter reaster@comptechnews.com --------- -- CompTechNews Message Board http://www.comptechnews.com/ -- -- CompTechServ Tech Services http://www.comptechserv.com/ -- ---------- http://www.comptechnews.com/~reaster/ ------------
В списке pgsql-sql по дате отправления: