我有三个表:历史,视频和用户.
以下两个查询为每个视频显示法国用户或德国用户的观看次数:
以下两个查询为每个视频显示法国用户或德国用户的观看次数:
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的更改,因为这是所选列.
原文地址:https://www.jb51.cc/mssql/77634.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。