Oracle仅按一列分组,但选择多个列
对象类型: 剧院(tno:integer,nome:string,city:string,phone:string) 星号(名字:字符串,性别:字符(l),出生日期:日期) Stars\u nt Star\u t表格 Film_t(filmno:integer,title:string,language:string,director:string, 预算:浮动,星星(nt) 放映(电影参考电影,剧院参考剧院,开始日期:日期,结束日期:日期) 表格 剧院的剧院(tno主键) 胶片的胶片(胶片无主键) 嵌套表格星形存储为星形\u ntb 放映演出(电影参考影片、剧院参考剧场)Oracle仅按一列分组,但选择多个列,oracle,aggregates,Oracle,Aggregates,对象类型: 剧院(tno:integer,nome:string,city:string,phone:string) 星号(名字:字符串,性别:字符(l),出生日期:日期) Stars\u nt Star\u t表格 Film_t(filmno:integer,title:string,language:string,director:string, 预算:浮动,星星(nt) 放映(电影参考电影,剧院参考剧院,开始日期:日期,结束日期:日期) 表格 剧院的剧院(tno主键) 胶片的胶片(胶片无主
我需要获得每家剧院播放时间最长的电影的片名,并显示剧院名称、城市和电影的片名
我尝试了很多方法,但我无法实现,因为在oracle sql中,我们无法添加列来选择不在group by中的列。我只需要按剧院名称分组,并显示剧院名称最长的电影名称和thetre之城。也许您需要KEEP分机 例如:“显示每个部门的最低工资”很容易 但现在你想加上谁的工资最低,这让你陷入困境
SQL> select deptno, empno, min(sal)
2 from emp
3 group by deptno;
ORA-00979: not a GROUP BY expression
您可以使用KEEP分析子句进行帮助
SQL> select
2 deptno,
3 min(sal),
4 min(empno) keep ( dense_rank FIRST order by sal) empno,
5 min(job) keep ( dense_rank FIRST order by sal) job,
6 min(ename) keep ( dense_rank FIRST order by sal) ename
7 from emp
8 group by deptno
9 /
DEPTNO MIN(SAL) EMPNO JOB ENAME
---------- ---------- ---------- --------- ----------
10 1300 7934 CLERK MILLER
20 800 7369 CLERK SMITH
30 950 7900 CLERK JAMES
关于分析SQL的全套教程,包括上述内容
如果某个剧院有两部(或更多)电影的“播放时间最长”,您需要展示什么?我需要展示这两部电影,然后感谢您的回答,但如果我们需要根据您的示例添加其他栏目,如员工联系电话,该怎么办。这会变得复杂,对吗?只有在复制/粘贴复杂的情况下:-)我已添加到原始答案中
SQL> select
2 deptno,
3 min(sal),
4 min(empno) keep ( dense_rank FIRST order by sal) empno,
5 min(job) keep ( dense_rank FIRST order by sal) job,
6 min(ename) keep ( dense_rank FIRST order by sal) ename
7 from emp
8 group by deptno
9 /
DEPTNO MIN(SAL) EMPNO JOB ENAME
---------- ---------- ---------- --------- ----------
10 1300 7934 CLERK MILLER
20 800 7369 CLERK SMITH
30 950 7900 CLERK JAMES