鍍金池/ 問答/數(shù)據(jù)庫(kù)  HTML/ Mysql 合并兩個(gè)查詢結(jié)果 結(jié)果被覆蓋

Mysql 合并兩個(gè)查詢結(jié)果 結(jié)果被覆蓋

  1. 在做一個(gè)綜合統(tǒng)計(jì)功能時(shí)使用了union all來進(jìn)行合并查詢結(jié)果 但是查詢得到的結(jié)果集發(fā)現(xiàn)結(jié)果被覆蓋了
  2. sql:
SELECT
    studyCenterName,
    grade,
    weiji,
    done,
    zong
FROM
    (
        SELECT
            e5. NAME AS studyCenterName,
            e4.grade AS grade,
            count(e1.id) AS weiji,
            0 AS done,
            0 AS zong
        FROM
            ex_examination e1
        LEFT JOIN ex_stage e2 ON e1.stage_id = e2.id
        LEFT JOIN ex_student_course e3 ON e1.student_course_id = e3.id
        LEFT JOIN ex_student e4 ON e3.student_id = e4.id
        LEFT JOIN ex_study_center e5 ON e4.study_center_id = e5.id
        WHERE
            e1. STATUS = 1
        GROUP BY
            e5. NAME,
            e4.grade
        UNION ALL
            SELECT
                e5. NAME AS studyCenterName,
                e4.grade AS grade,
                0 AS weiji,
                count(e1.id) AS done,
                0 AS zong
            FROM
                ex_examination e1
            LEFT JOIN ex_stage e2 ON e1.stage_id = e2.id
            LEFT JOIN ex_student_course e3 ON e1.student_course_id = e3.id
            LEFT JOIN ex_student e4 ON e3.student_id = e4.id
            LEFT JOIN ex_study_center e5 ON e4.study_center_id = e5.id
            WHERE
                e1.end_exam_date < NOW()
            AND e1.is_simulate = 0
            GROUP BY
                e5. NAME,
                e4.grade
            UNION ALL
                SELECT
                    e5. NAME AS studyCenterName,
                    e4.grade AS grade,
                    0 AS weiji,
                    0 AS done,
                    count(e1.id) AS zong
                FROM
                    ex_examination e1
                LEFT JOIN ex_stage e2 ON e1.stage_id = e2.id
                LEFT JOIN ex_student_course e3 ON e1.student_course_id = e3.id
                LEFT JOIN ex_student e4 ON e3.student_id = e4.id
                LEFT JOIN ex_study_center e5 ON e4.study_center_id = e5.id
                GROUP BY
                    e5. NAME,
                    e4.grade
    ) a
GROUP BY
    studyCenterName,
    grade
ORDER BY
    studyCenterName

查詢結(jié)果:

clipboard.png

把union連接的三個(gè)sql單獨(dú)執(zhí)行的結(jié)果集:

clipboard.png

clipboard.png

clipboard.png

請(qǐng)問有什么辦法解決這類問題嗎

回答
編輯回答
殘淚

不是union all的問題吧。
sql語(yǔ)句最后有g(shù)roup by語(yǔ)句, 相同的studyCenterName,grade只保留一條,去掉看是否你想要的結(jié)果。

另外,這個(gè)sql的寫法,使用group by之后,在select語(yǔ)句中非group by的字段沒用聚合函數(shù),在myslq高版本或其他數(shù)據(jù)庫(kù)會(huì)報(bào)錯(cuò)的。

2018年3月31日 14:04