Oracle仅按一列分组,但选择多个列

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主键) 胶片的胶片(胶片无主

对象类型:

剧院(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 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