先上代码

SELECT
     *
FROM(
    SELECT
    e.exam_id tid,
    count(distinct e.uid) uv,
    count(e.start_time) pv
FROM
    exam_record e
GROUP BY
    e.exam_id
ORDER BY
    uv DESC,pv DESC
) exa 

UNION ALL

SELECT
    *
FROM(
SELECT
    question_id tid,
    count(distinct p.uid) uv,
    count(submit_time) pv
FROM
    practice_record p
GROUP BY
    question_id
ORDER BY
    uv DESC,pv DESC
) que

不知道是不是我做的题越来越简单还是我越来越强?总之现在的题没啥说的。

这道题还有的说的话就是执行顺序

语法:

select 查询列表 ⑦

from 表1 别名 ①

连接类型 join 表2 ②

on 连接条件 ③

where 筛选 ④

group by 分组列表 ⑤

having 筛选 ⑥

order by排序列表 ⑧

union 联合两表 ⑨

limit 起始条目索引,条目数; ⑩

也就是说这样union就会报错

 SELECT
    e.exam_id tid,
    count(distinct e.uid) uv,
    count(e.start_time) pv
FROM
    exam_record e
GROUP BY
    e.exam_id
ORDER BY
    uv DESC,pv DESC

UNION ALL

SELECT
    question_id tid,
    count(distinct p.uid) uv,
    count(submit_time) pv
FROM
    practice_record p
GROUP BY
    question_id
ORDER BY
    uv DESC,pv DESC

而这样

 SELECT
    e.exam_id tid,
    count(distinct e.uid) uv,
    count(e.start_time) pv
FROM
    exam_record e
GROUP BY
    e.exam_id

UNION ALL

SELECT
    question_id tid,
    count(distinct p.uid) uv,
    count(submit_time) pv
FROM
    practice_record p
GROUP BY
    question_id
ORDER BY
    uv DESC,pv DESC

会导致输出顺序混乱