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 по дате отправления:

Предыдущее
От: Jussi Vainionpää
Дата:
Сообщение: Re: Trouble with subqueries
Следующее
От: Forest Wilkinson
Дата:
Сообщение: unreferenced primary keys: garbage collection