【问题标题】:Oracle SQL count and group byOracle SQL 计数和分组依据
【发布时间】:2021-04-11 21:37:55
【问题描述】:

我试图展示电影的详细信息,包括角色数量和分类的类型数量。 (家庭,幻想)。

我希望结果如下:

movie_id   title              genre     count(movie_role) count(genre)  
675        harry potter a     family    3                 2
675        harry potter a     fantasy   3                 2
767        harry potter b     family    3                 1

我的代码:

SELECT movie_id, title, count(movie_role), genre
from moviesInGenre
group by movie_id, title, genre;

因为哈利波特a被归类为流派家庭和奇幻, 所以我希望它有一列计算它被归类为的类型。 (2)。并且哈利波特 b 仅被归类为家庭,因此计数应为 1。

样本数据:

movie_id  title           movie_role   actor_id   aname   genre
675       harry potter a  Harry        10993      Jarney  Family
675       harry potter a  Nana         10232      Sam     Fantasy
767       harry potter b  John         10911      Cart    Family

提前致谢!

【问题讨论】:

  • 当有两部不同的电影,一部为 2,一部为 1 时,为什么您希望 movie_role 的计数为 3?
  • 对不起,这不是完整的数据,实际数据是它有 3 行哈利波特 a,所以 3 个电影角色。我将编辑我的帖子

标签: sql database oracle count


【解决方案1】:

可以使用解析函数count如下:

SELECT movie_id, title, count(movie_role), genre, 
       count(*) over (partition by movie_id) as genre_count -- this
from moviesInGenre
group by movie_id, title, genre;

【讨论】:

  • @justforfun 。 . .这对我来说看起来是正确的,而且更简单,并且应该有更好的性能。
【解决方案2】:

您可以借助查找各种不同计数的子查询来做到这一点:

SELECT
    t.movie_id,
    t.title,
    t.genre,
    rc.role_cnt,
    g.genre_cnt
FROM moviesInGenre t
INNER JOIN
(
    SELECT movie_id, COUNT(DISTINCT movie_role) AS role_cnt
    FROM moviesInGenre
    GROUP BY movie_id
) rc
    ON rc.movie_id = t.movie_id
INNER JOIN
(
    SELECT movie_id, COUNT(DISTINCT genre) AS genre_cnt
    FROM moviesInGenre
    GROUP BY movie_id
) g
    ON g.movie_id = t.movie_id;

Demo

【讨论】:

  • 感谢您的回答,它适用于该类型。但是,如果我还想计算每部电影的角色数量,是否可以将其合并到此代码中?
  • 好的...让我编辑我的答案。老实说,你的要求对我来说不是很清楚。
  • 是的,很抱歉,本来要编辑帖子但它又恢复了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2016-10-17
  • 2012-05-20
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多