前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能

感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能

作者头像
AustinDatabases
发布2024-05-21 17:27:34
780
发布2024-05-21 17:27:34
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

在 5月20日发帖,PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定,中的第二部分,中关于SQL的撰写与题目不符的问题进行纠正,感谢老虎刘, 刘老师的及时指正。

错误的位置在以下部分,语句撰写与描述部分无关的问题。

练习2 展示考分中,英语成绩最低,但通过数学成绩进行排名从高的人的学号,姓名和数学分数

这个语句的主要撰写的方案是,先对要进行查询的数据范围进行缩小,lowestEnglistscorestudents 就是在对最低的英语成绩进行筛选,这里的distinct on 主要是对student_id 进行去重,防止一个学生在不同的学期的英语成绩都是最低的,然后最后展示的不是两个人而是一个人两次占用的最低英语成绩的名额,基于POSTGRESQL中在order by 语句中的去重不能直接写distinct 只能使用distinct on 的表达方式。

在获得最低英语成绩的两个学生的ID后,在通过mathscoresforlowestenglish 来对要展示的数据进行组合,这里只获取英语最低成绩的两个人的ID 与整体数据进行LEFT JOIN 后只展示数学成绩,最后在获得数据后,对数据成绩进行倒序排序完成整个语句的撰写

代码语言:javascript
复制
代码语言:javascript
复制
sql_test=# WITH LowestEnglishScoreStudents AS (
    SELECT DISTINCT ON (student_id)
        student_id
    FROM
        scores
    WHERE
        subject_id = 2
    ORDER BY
        student_id, score ASC
    LIMIT 2
),
MathScoresForLowestEnglish AS (
    SELECT
        s.student_id,
        st.name,
        s.score AS math_score
    FROM
        scores s
    JOIN
        LowestEnglishScoreStudents les ON s.student_id = les.student_id
    JOIN
        students st ON s.student_id = st.student_id
    WHERE
        s.subject_id = 1
)
SELECT
    student_id,
    name,
    math_score
FROM
    MathScoresForLowestEnglish
ORDER BY
    math_score DESC;
 student_id | name  | math_score 
------------+-------+------------
          1 | John  |         95
          2 | Alice |         92
          1 | John  |         90
          2 | Alice |         80
(4 rows)

经过刘老师的指点,语句应为下图,再次感谢刘老师指正!!

请各位读者注意相关问题和刘老师给出的改正SQL。

原贴为:

https://mp.weixin.qq.com/s?__biz=Mzg4NDA0NTEwNA==&mid=2247501929&idx=1&sn=05afa9d867b5deeb36bcd05d6bee73e0&chksm=cfbcac36f8cb25208d010fdffa83631169e91434e43d6dd975b51830b053f9187864b3fb9c7d&token=2096854191&lang=zh_CN#rd

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档