在查询的输出上应用DENSE_RANK()

阿克沙伊(Akshay Shah)

我有三个分别名为Groups,GroupMembers和DailyTable的表。以下是我为每个模型制作的模型:

models.py

class Group(models.Model):

    name = models.CharField(max_length=255, blank=False, null=False)
    group_type = models.ForeignKey('GroupType',blank=True,default=False)

    class Meta:
        db_table = 'groups'

class GroupMembers(models.Model):
    group = models.ForeignKey('Group')
    user = models.ForeignKey('User')
    status = models.CharField(max_length=20)

    class Meta:
        db_table = 'group_members'
        unique_together = ['group', 'user']

class DailyTable(models.Model):    
    class Meta:
        managed = True
        db_table = 'dailytable'

    user_id = models.IntegerField(db_index=True)        
    calories = models.FloatField()        
    date = models.DateField()

我想计算每个小组各自消耗的总卡路里。所以我启动了以下查询:

 select groups.id,groups.name as group_display_name,
(select count(*) from group_members where group_id = groups.id and status = 'accepted' and groups.group_type_id = 1) as total_members,
(select sum(calories) from dailytable where user_id in (select user_id from group_members where group_id = groups.id and groups.group_type_id = 1) and dailytable.date='2016-02-02') as total_calories,
(select case when exists(select * from group_members where group_id = groups.id and user_id = 3 and status = 'accepted' and groups.group_type_id = 1) then cast(1 as bit) else cast(0 as bit) end) as is_member_of_group
from groups 
where groups.group_type_id = 1
order by total_calories desc 
nulls last;

下面是我得到的输出。在此处输入图片说明现在,我想根据已刻录的total_calories对组进行排名,因此我在查询中进行了以下更改:

....
dense_rank() over(order by total_calories)
from groups
....

错误: “ total_calories”列不存在

我想将RANK应用于查询的输出。有什么办法可以做到这一点。

亚历山大·拉特尼科夫(Aleksey Ratnikov)

这是因为您正在尝试在density_rank()中使用派生的列别名,该别名在此处不可用。在CTE中包装查询,并在其上应用density_rank():

WITH baseQuery AS (
    SELECT
        groups.id,
        groups.name AS group_display_name,
        (
            SELECT
                count(*)
            FROM group_members
            WHERE
                group_id = groups.id AND status = 'accepted' AND groups.group_type_id = 1) AS total_members,
        (
            SELECT
                sum(calories)
            FROM dailytable
            WHERE
                user_id IN (
                    SELECT
                        user_id
                    FROM group_members
                    WHERE
                        group_id = groups.id 
                        AND groups.group_type_id = 1
                ) AND dailytable.date = '2016-02-02'
        ) AS total_calories,
        (
            SELECT
                CASE WHEN exists(SELECT
                                     *
                                 FROM group_members
                                 WHERE
                                     group_id = groups.id 
                                     AND user_id = 3 
                                     AND status = 'accepted' 
                                     AND groups.group_type_id = 1)
                    THEN cast(1 AS BIT)
                ELSE cast(0 AS BIT) END) AS is_member_of_group
    FROM groups
    WHERE
        groups.group_type_id = 1
)
    select * ,
        dense_rank() over(order by total_calories)
    from baseQuery
    ORDER BY total_calories DESC
    NULLS LAST

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PostgreSQL的Postgres转换KEEP DENSE_RANK FIRST

来自分类Dev

T-SQL“ dense_rank”,每个级别具有最大行数

来自分类Dev

SQL查询在单个输出上显示多/多关系?

来自分类Dev

Oracle-在DENSE_RANK中处理NULL

来自分类Dev

DENSE_RANK根据特定顺序

来自分类Dev

使用DENSE_RANK的顺序数和最大值

来自分类Dev

MS Access和SQL:在查询输出上执行计算时出错

来自分类Dev

Oracle订购依据-基于功能(dense_rank)

来自分类Dev

考虑到Oracle中的多个列,如何重新排序DENSE_RANK列?

来自分类Dev

不用DENSE_RANK重写查询

来自分类Dev

MySQL Dense_Rank()和Max()函数在同一条语句中不起作用

来自分类Dev

MySQL从DENSE_RANK()结果更新同一表字段

来自分类Dev

将Dense_Rank Oracle转换为PostgresSQL

来自分类Dev

PostgreSQL的Postgres转换KEEP DENSE_RANK FIRST

来自分类Dev

ms sql:如何与Group by一起使用Dense_Rank

来自分类Dev

Dense_rank和求和

来自分类Dev

如何在SQL 2008中使用RANK()获得DENSE_RANK()结果

来自分类Dev

SQL rank / dense_rank以及如何查询/计算结果

来自分类Dev

SQL Keep(dense_rank最后排序者)到H2数据库

来自分类Dev

如何重设DENSE_RANK

来自分类Dev

带有Case语句的Dense_Rank没有给出带有日期的排名

来自分类Dev

使用Dense_Rank在SQL中显示行号

来自分类Dev

Dense_Rank排序

来自分类Dev

T-SQL DENSE_RANK() 没有返回我所期望的

来自分类Dev

DENSE_RANK() OVER (PARTITION BY) 的 Sybase 替代方案

来自分类Dev

无法使用 Dense Rank 获得所需的输出

来自分类Dev

Rank 或 Dense_Rank

来自分类Dev

为什么我不能将dense_rank 用于SQL“排名分数”?

来自分类Dev

Dense_rank 查询在 sql(4 个不同的列)中

Related 相关文章

热门标签

归档