sql - 求和而不计算重复值 SQL
问题描述
我有一个suivis
包含列 id_action 和 id_individu 的表,该表可以包含多个重复值(不是整行,只有列)。
我还有一个individus
包含一列的表statut_collaborateur
,该表可以有两个值:'no' 和'granted'。
我需要帮助来计算 id_individu 的数量 statut_collaborateur = no 和 statut_collaborateur = 授予但只有一次。
现在,我设法做到了:
SELECT j.date_debut, j.date_fin, j.titre, so.id_identite, so.nom_societe,
SUM(CASE WHEN (i.statut_collaborateur = 'granted') THEN 1 ELSE 0 END) AS interne,
SUM(CASE WHEN (i.statut_collaborateur = 'no') THEN 1 ELSE 0 END) AS externe,
r.nom_responsable
FROM individus AS i
LEFT JOIN suivis AS s ON s.id_individu = i.id_individu
LEFT JOIN jurys AS j ON j.id_jury = s.id_jury
LEFT JOIN societes AS so ON so.id_societe = j.id_societe
LEFT JOIN responsables AS r ON r.id_responsable = j.id_responsable
WHERE s.id_action = 22
AND j.statut IN (1,3)
AND j.date_debut BETWEEN '2018-01-01 00:00:00' AND '2018-10-23 23:59:59'
GROUP BY s.id_jury`
主要问题是我必须在总和中完成,我也尝试过计数但结果相同,我的计数是 5,它应该是 3(3 个不同的个体)。
解决方案
仅使用表 individus 的不同语句连接所需的列
SELECT j.date_debut, j.date_fin, j.titre, so.id_identite, so.nom_societe,
SUM(CASE WHEN (i.statut_collaborateur = 'granted') THEN 1 ELSE 0 END) AS interne,
SUM(CASE WHEN (i.statut_collaborateur = 'no') THEN 1 ELSE 0 END) AS externe,
r.nom_responsable
FROM (SELECT DISTINCT i.id_individu ,i.statut_collaborateur from individus )AS i
LEFT JOIN suivis AS s ON s.id_individu = i.id_individu
LEFT JOIN jurys AS j ON j.id_jury = s.id_jury
LEFT JOIN societes AS so ON so.id_societe = j.id_societe
LEFT JOIN responsables AS r ON r.id_responsable = j.id_responsable
WHERE s.id_action = 22
AND j.statut IN (1,3)
AND j.date_debut BETWEEN '2018-01-01 00:00:00' AND '2018-10-23 23:59:59'
GROUP BY j.date_debut, j.date_fin, j.titre, so.id_identite, so.nom_societe,r.nom_responsable
推荐阅读
- java - 读取文件时出现未知源错误
- sql - B树索引好像没有用?
- node.js - Webdriver.io (wdio) - Browserstack - waitforDisplayed 失败
- nltk - 使用 `nltk.parse.corenlp.CoreNLPParser` 时自定义标记器
- form-submit - 表单提交错误:激活链接在激活后一直发送
- javascript - 创建对象最安全的方法是什么(工厂、类、Eventmittler3)
- vue.js - Nuxt.js - 谷歌分析设置不跟踪任何活动
- javascript - Mapbox & D3:如何创建适当的颜色缩放?
- reactjs - 仅更改 State şin React 的一项属性
- firebase - Flutter Firestore > Streambuilder > ListView to detailpage onTap