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

前端之家收集整理的这篇文章主要介绍了sql – 将两个选择查询合并为一个前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有三个表:历史,视频和用户.
以下两个查询为每个视频显示法国用户或德国用户的观看次数
  1. SELECT V.idVideo,COUNT(H.idVideo) AS nb_fr
  2. FROM HISTORY H
  3. INNER JOIN VIDEO V ON V.idVideo = H.idVideo
  4. INNER JOIN USER U ON U.idUser = H.idUser
  5. WHERE U.nationality = 'french'
  6. GROUP BY H.idVideo
  7. ORDER BY V.idVideo;

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

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

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

解决方法

用例表达式执行条件聚合:
  1. 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
  2. FROM HISTORY H
  3. INNER JOIN VIDEO V ON V.idVideo = H.idVideo
  4. INNER JOIN USER U ON U.idUser = H.idUser
  5. WHERE U.nationality in ('french','german')
  6. GROUP BY V.idVideo
  7. ORDER BY V.idVideo;

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

猜你在找的MsSQL相关文章