1

这是我第一次在这里发帖。几个月来我一直在悄悄地浏览论坛。

我正在尝试显示类别名称、四分位数和每个四分位数的标题数。这是我的 SQL 代码:

SELECT name, standard_quartile, count
FROM 
     (SELECT c.name, ntile(4) over (order by f.rental_duration) as 
     standard_quartile, count(f.title) as count
     FROM category c
     JOIN film_category fc ON c.category_id=fc.category_id
     JOIN film f ON fc.film_id=f.film_id 
     WHERE c.name='Animation' OR c.name='Children' OR c.name='Classics' OR 
     <BR>c.name='Comedy' OR c.name='Family' OR c.name='Music'
     <BR>GROUP BY c.name, f.rental_duration
     <BR>) t1
GROUP BY 1, 2, 3
ORDER BY 1,2

但是,因为我无法按四分位数分组(它是一个窗口函数),所以它没有按我的意愿显示结果。我认为将它放在子查询中可能会使其工作,但事实并非如此。我认为另一个问题是一个四分位数可以有多个与之相关的租赁期限数字。

这是它的样子:

动画1 12
动画1 18
动画2 9
动画3 13
动画4 14
儿童1 12
儿童2 9
儿童2 15
儿童3 13
儿童4 11

如果有人能指出我正确的方向或有有用的提示,我将不胜感激。

计数和分组是我要解决的问题。如果您在显示结果的片段中看到,动画有两个 1 四分位数,儿童有两个 2 四分位数。每一种都应该有。但是由于我不能按四分位数分组,因为它是一个窗口函数,所以它是按rental_duration 分组的。

谢谢!:)

PS - 这就是它应该看起来的样子:

预期查询结果截图

4

2 回答 2

1

我认为您group by只需要外部查询:

SELECT name, standard_quartile, count(*)
FROM (SELECT c.name,
             ntile(4) over (order by f.rental_duration) as standard_quartile
     FROM category c JOIN
          film_category fc
          ON c.category_id = fc.category_id JOIN
          film f
          ON fc.film_id = f.film_id 
     WHERE c.name IN ('Animation', 'Children', 'Classics', 'Comedy', 'Family', 'Music')
    ) t1
GROUP BY name, standard_quartile
ORDER BY name, standard_quartile;

还要注意in类别列表的使用。

于 2018-08-20T11:43:40.707 回答
0
select name , standard_quartile, sum(count)
    FROM(
    SELECT name, standard_quartile, count
    FROM 
         (SELECT c.name, ntile(4) over (order by f.rental_duration) as 
         standard_quartile, count(f.title) as count
         FROM category c
         JOIN film_category fc ON c.category_id=fc.category_id
         JOIN film f ON fc.film_id=f.film_id 
         WHERE c.name='Animation' OR c.name='Children' OR c.name='Classics' OR 
         <BR>c.name='Comedy' OR c.name='Family' OR c.name='Music'
         <BR>GROUP BY c.name, f.rental_duration
         <BR>) t1
    GROUP BY 1, 2, 3) t2
group by 1,2
ORDER BY 1,2
于 2018-08-20T06:49:41.823 回答