【问题标题】:SQL GROUP BY as new columnsSQL GROUP BY 作为新列
【发布时间】:2018-08-29 19:26:23
【问题描述】:

我正在使用 sqlite3 查询学生数据库,其中只有 students 表存在。 此处重要的列是 governorategrade

我想查看每个省超过 90% 的学生百分比,因此我编写了以下查询:

SELECT governorate, CASE
                WHEN grade > 360 AND grade <= 410 THEN '90%'
                WHEN grade > 320 THEN '80%'
                WHEN grade > 280 THEN '70%'
                WHEN grade > 240 THEN '60%'
                WHEN grade > 200 THEN '50%'
                WHEN grade > 160 THEN '40%'
                WHEN grade > 120 THEN '30%'
                WHEN grade > 80 THEN '20%'
                WHEN grade > 40 THEN '10%'
                WHEN grade > 0 THEN '0%'
                WHEN grade == 0 THEN '0'
             END AS bucket, COUNT(*) AS number FROM students GROUP BY 1, 2;

现在这只告诉您每个桶中的学生数量,而不是省学生总数的百分比

它为每个省创建十行,我想要创建一个标记为 90-100 的新列并按该列排序。

【问题讨论】:

    标签: android sql sqlite android-sqlite


    【解决方案1】:

    在 SQLite 中,您可以使用子查询:

    SELECT governorate,
           (CASE WHEN grade > 360 AND grade <= 410 THEN '90%'
                    WHEN grade > 320 THEN '80%'
                    WHEN grade > 280 THEN '70%'
                    WHEN grade > 240 THEN '60%'
                    WHEN grade > 200 THEN '50%'
                    WHEN grade > 160 THEN '40%'
                    WHEN grade > 120 THEN '30%'
                    WHEN grade > 80 THEN '20%'
                    WHEN grade > 40 THEN '10%'
                    WHEN grade > 0 THEN '0%'
                    WHEN grade = 0 THEN '0'
                 END) AS bucket,
            COUNT(*) AS number,
            COUNT(*) * 100.0 / c.cnt as percentage
    FROM students s CROSS JOIN
         (SELECT COUNT(*) as cnt FROM students) c
    GROUP BY 1, 2;
    

    【讨论】:

    • 这确实告诉我百分比,但桶仍然创建一个新行。我希望该行包含 governorate | 90% | 80% |等等......每列下每个桶的百分比。
    • @KhaledEmara 然后添加pivot 操作。
    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 2014-08-29
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多