Oracle 仅按一列分组但 select 多列

Oracle Group by only one column but select many columns

对象类型:

Theatre_t (tno:整数, nome:string, city:string, phone:string)

Star_t (nome:string, gender:char(l), birthdate:date) Stars_nt table 之星_t

Film_t (片号:整数, title:string, language:string, director:string, budget:float,星星 stars_nt)

Show_t(电影参考 film_t,剧院参考 theatre_t,startdate:date,enddate:date)

表格

theatre_t 的剧院(没有主键)

film_t的电影(filmno主键) 嵌套 table 星存储为 stars_ntb

放映show_t(电影参考电影,剧院参考剧院)


我需要为每个剧院获取播放时间最长的电影名称period.and显示剧院名称、城市和电影名称。

我尝试了很多方法,但我无法实现,因为在 oracle sql 中,我们无法将不在分组依据中的列添加到 select。我只需要按剧院名称分组并显示最长的剧院名称 运行 电影名称和剧院所在的城市。

也许您需要 KEEP 扩展。

例如:“显示每个部门的最低工资”很简单

SQL> select deptno, min(sal)
  2  from emp
  3  group by deptno;

但现在你想加上谁的工资也是最低的,这让你陷入困境

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,包括上面的内容

https://www.youtube.com/watch?v=0cjxYMxa1e4&list=PLJMaoEWvHwFIUwMrF4HLnRksF0H8DHGtt