加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 将两个选择查询合并为一个

发布时间:2020-12-12 06:49:56 所属栏目:MsSql教程 来源:网络整理
导读:我有三个表:历史,视频和用户. 以下两个查询为每个视频显示法国用户或德国用户的观看次数: SELECT V.idVideo,COUNT(H.idVideo) AS nb_frFROM HISTORY HINNER JOIN VIDEO V ON V.idVideo = H.idVideoINNER JOIN USER U ON U.idUser = H.idUserWHERE U.nationa
我有三个表:历史,视频和用户.
以下两个查询为每个视频显示法国用户或德国用户的观看次数:
SELECT V.idVideo,COUNT(H.idVideo) AS nb_fr
FROM HISTORY H
INNER JOIN VIDEO V ON V.idVideo = H.idVideo
INNER JOIN USER U ON U.idUser = H.idUser
WHERE U.nationality = 'french'
GROUP BY H.idVideo
ORDER BY V.idVideo;

SELECT V.idVideo,COUNT(H.idVideo) AS nb_ge
FROM HISTORY H
INNER JOIN VIDEO V ON V.idVideo = H.idVideo
INNER JOIN USER U ON U.idUser = H.idUser
WHERE U.nationality = 'german'
GROUP BY H.idVideo
ORDER BY V.idVideo

但是如何将这两个查询结合起来只有一个?
我想要这样的东西:

idVideo | nb_fr | nb_ge
-----------------------
    1   |   5   |   4
    2   |   3   |   6
    3   |   2   |   8
    4   |   3   |   3

解决方法

用例表达式执行条件聚合:
SELECT V.idVideo,COUNT(case when U.nationality = 'french' then H.idVideo end) AS nb_fr,COUNT(case when U.nationality = 'german' then H.idVideo end) AS nb_ge
FROM HISTORY H
INNER JOIN VIDEO V ON V.idVideo = H.idVideo
INNER JOIN USER U ON U.idUser = H.idUser
WHERE U.nationality in ('french','german')
GROUP BY V.idVideo
ORDER BY V.idVideo;

请注意对GROUP BY V.idVideo的更改,因为这是所选列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读