【问题标题】:SQL Query conversion to Django ORMSQL 查询转换为 Django ORM
【发布时间】:2021-07-06 09:05:39
【问题描述】:
select
    l.student_id,
    SUM(l.sum_result)
FROM
    (
        SELECT
            w.student_id,
            w.subject_id,
            r.total as sum_result
        from
            Student w
            INNER JOIN (
                SELECT
                    COUNT(r.id) as total,
                    r.subject_fk_id
                from
                    Result r
                GROUP BY
                    r.subject_fk_id
            ) r ON w.subject_id = r.subject_fk_id
    ) l
GROUP BY
    student_id

The tables are:

Student
-------------
-> id(PK)
->student_name
->student_email


Subject
--------------
-> id(PK)
-> subject_name


Results
---------------
->id (PK)
->subject_fk(FK to subject table)
->date

学生和学科有一个多对多表

Student_Subject
->id(PK)
->Student_id(FK)
->Subject_id(FK)

我想将此 SQL 查询转换为 Django ORM 我需要检索学生的结果总数。我需要在 Django 中编写这个查询 没有 for 循环的 ORM。提前谢谢你

【问题讨论】:

    标签: sql django join orm django-orm


    【解决方案1】:

    您的查询缺少关系部分,您也可以将查询简化为:

    select s.student_id,count(r.id)
    from students s 
    Join student_subject ss 
     on ss.studentid = s.studentid
    join subject sb
     on sb.subject_id = ss.subject_id
    join result r
     on r.ssid = ss.id 
    group by s.student_id
    

    所以现在我认为您可以轻松地自己编写等效的 ORM,对吗? ;)

    【讨论】:

    • 对不起,我的错误,科目表中没有学生。在 Django 中,在 Subject 表中定义了一个名为 Student_Subject 的字段,它与 Student 表具有多对多关系。因此使用 Student_Subject 名称创建了一个表
    • 所以再加入一个。还是简单的查询
    • 不客气,如果有帮助请采纳答案
    猜你喜欢
    • 2016-04-20
    • 2020-09-12
    • 1970-01-01
    • 2022-08-18
    • 2019-10-17
    • 2018-06-10
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多