avatar
SQL问题请教# Database - 数据库
b*s
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这里不对
avatar
M*r
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 的大作中提到】
: 有两个表,一个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

avatar
b*s
3
问题在于如果一部电影并没有在哪家电影院上映,那么它在sale表里
就找不到,而它最终显示出来的票房应该是0。
这个只能找出在电影院上映的片子的票房 :(

【在 M*****r 的大作中提到】
: 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;

avatar
w*e
4
order by里的year_released没在select里出现
当然出错了

【在 b***s 的大作中提到】
: 有两个表,一个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

avatar
x*e
5
看见union就已经晕了

【在 w*******e 的大作中提到】
: order by里的year_released没在select里出现
: 当然出错了

avatar
c*e
6
try an outer join, you may want to add zeroifnull

【在 b***s 的大作中提到】
: 有两个表,一个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

avatar
b*s
7
问题在于如果一部电影并没有在哪家电影院上映,那么它在sale表里
就找不到,而它最终显示出来的票房应该是0。
这个只能找出在电影院上映的片子的票房 :(

【在 M*****r 的大作中提到】
: 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;

avatar
D*f
8
By the way, I agree with OP that Union is more intuitive to me.
My solution is working in MS-Access... Han ......
avatar
D*f
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 的大作中提到】
: 有两个表,一个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

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。