b***s 发帖数: 117 | 1 有两个表,一个movies,有id, title, year_released
另一个sale表,有movie_id, sale,theatre
现在要得到各movie(title)卖票的总额,然后按year_released排序
而movie可能在多个theatre里放映,在sale表里有多条记录
也可能没有放映,在sale里没有记录,那么就是0
怎么用一个SQL写呢?
我试了
SELECT title, sum(sale) FROM movies, sale
WHERE movies.id=sale.movie_id
GROUP BY title
UNION
SELECT title, 0
FROM movies
WHERE movies.id NOT IN (SELECT movie_id FROM sale)
ORDER BY movies.year_released;
但是通不过,报告说ODER BY year_released这里不对 | M*****r 发帖数: 1536 | 2 This inline view works in Oracle:
select sale_v.title, sale_v.t_sale, movies.year_released
from movies,
(select movies.title title, SUM(sale.sale) t_sale
from movies, sale
where movies.id = sale.movie_id
group by movies.title) sale_v
where sale_v.title = movies.title
order by movies.year_released;
【在 b***s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 有两个表,一个movies,有id, title, year_released : 另一个sale表,有movie_id, sale,theatre : 现在要得到各movie(title)卖票的总额,然后按year_released排序 : 而movie可能在多个theatre里放映,在sale表里有多条记录 : 也可能没有放映,在sale里没有记录,那么就是0 : 怎么用一个SQL写呢? : 我试了 : SELECT title, sum(sale) FROM movies, sale : WHERE movies.id=sale.movie_id : GROUP BY title
| b***s 发帖数: 117 | 3 问题在于如果一部电影并没有在哪家电影院上映,那么它在sale表里
就找不到,而它最终显示出来的票房应该是0。
这个只能找出在电影院上映的片子的票房 :(
【在 M*****r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : This inline view works in Oracle: : select sale_v.title, sale_v.t_sale, movies.year_released : from movies, : (select movies.title title, SUM(sale.sale) t_sale : from movies, sale : where movies.id = sale.movie_id : group by movies.title) sale_v : where sale_v.title = movies.title : order by movies.year_released;
| w*******e 发帖数: 1622 | 4 order by里的year_released没在select里出现
当然出错了
【在 b***s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 有两个表,一个movies,有id, title, year_released : 另一个sale表,有movie_id, sale,theatre : 现在要得到各movie(title)卖票的总额,然后按year_released排序 : 而movie可能在多个theatre里放映,在sale表里有多条记录 : 也可能没有放映,在sale里没有记录,那么就是0 : 怎么用一个SQL写呢? : 我试了 : SELECT title, sum(sale) FROM movies, sale : WHERE movies.id=sale.movie_id : GROUP BY title
| x***e 发帖数: 2449 | 5 看见union就已经晕了
【在 w*******e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : order by里的year_released没在select里出现 : 当然出错了
| c*******e 发帖数: 8624 | 6 try an outer join, you may want to add zeroifnull
【在 b***s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 有两个表,一个movies,有id, title, year_released : 另一个sale表,有movie_id, sale,theatre : 现在要得到各movie(title)卖票的总额,然后按year_released排序 : 而movie可能在多个theatre里放映,在sale表里有多条记录 : 也可能没有放映,在sale里没有记录,那么就是0 : 怎么用一个SQL写呢? : 我试了 : SELECT title, sum(sale) FROM movies, sale : WHERE movies.id=sale.movie_id : GROUP BY title
| b***s 发帖数: 117 | 7 问题在于如果一部电影并没有在哪家电影院上映,那么它在sale表里
就找不到,而它最终显示出来的票房应该是0。
这个只能找出在电影院上映的片子的票房 :(
【在 M*****r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : This inline view works in Oracle: : select sale_v.title, sale_v.t_sale, movies.year_released : from movies, : (select movies.title title, SUM(sale.sale) t_sale : from movies, sale : where movies.id = sale.movie_id : group by movies.title) sale_v : where sale_v.title = movies.title : order by movies.year_released;
| D******f 发帖数: 109 | 8 By the way, I agree with OP that Union is more intuitive to me.
My solution is working in MS-Access... Han ...... | D******f 发帖数: 109 | 9 Try the following statements.
You have to include "year_released" in "select" in order to "order by" it.
You need to include "year_released" in "group by" to make it running
SELECT title, sum(sale), year_released FROM movies, sale
WHERE movies.id=sale.movie_id
GROUP BY title, year_released
UNION
SELECT title, 0, year_released
FROM movies
WHERE movies.id NOT IN (SELECT movie_id FROM sale)
ORDER BY movies.year_released
【在 b***s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 有两个表,一个movies,有id, title, year_released : 另一个sale表,有movie_id, sale,theatre : 现在要得到各movie(title)卖票的总额,然后按year_released排序 : 而movie可能在多个theatre里放映,在sale表里有多条记录 : 也可能没有放映,在sale里没有记录,那么就是0 : 怎么用一个SQL写呢? : 我试了 : SELECT title, sum(sale) FROM movies, sale : WHERE movies.id=sale.movie_id : GROUP BY title
|
|