[英]SQL Query not returning the correct number from sum()
我目前正在尝试创建一个粗略的排名/排序查询,该查询将根据用户提交的数据为他们“打分”。
在“角色/职位”字段中只有一次“总裁”的人将获得100分,而在“角色/职位”字段中具有“%vice%”的人(如副总裁)将获得大约一半的分数。给那些只有“总统”的人。
SELECT *, sum(relevance)
FROM (
SELECT a.*,
100 AS relevance
FROM application a,
document d
WHERE d.`Role/Position` LIKE 'president'
AND d.`AppID` = a.`AppId`
AND `AwardID` != 'NULL'
AND `Schoolyear` = '2013-2014'
UNION
SELECT a.*,
50 AS relevance
FROM application a,
document d
WHERE d.`Role/Position` LIKE '%vice%'
AND d.`AppID` = a.`AppId`
AND `AwardID` != 'NULL'
AND `Schoolyear` = '2013-2014'
) results
GROUP BY AppID
ORDER BY sum(relevance) DESC
我的问题是,如果我省略联合选择部分,那么对于具有两个“ president”字段的某人,我总共可以得出200。 如果联合选择部分保留在查询中,则相关性仅得出100。
具有两个“总统”字段的人应该有200,而具有“%vice%”和“总统”的人应该具有150的总和(相关性)值。 对于具有两个“总统”和两个“%vice%”的人,该值也不超过150。 有人可以指出我做错了吗?
关于SQL和Web设计,我有很多东西要学习,这就是为什么我要寻求帮助来确定我的查询哪里出错的原因。 我以本指南为基础来查询。
UNION
执行DISTINCT
,它将消除重复的行。 由于您希望application
每行有多个匹配项,因此应改为使用UNION ALL
;
SELECT *, sum(relevance)
FROM (
SELECT a.*, 100 AS relevance
FROM application a, document d
WHERE d.`Role/Position` LIKE 'president' AND d.`AppID` = a.`AppId`
AND `AwardID` != 'NULL' AND `Schoolyear` = '2013-2014'
UNION ALL
SELECT a.*, 50 AS relevance
FROM application a, document d
WHERE d.`Role/Position` LIKE '%vice%' AND d.`AppID` = a.`AppId`
AND `AwardID` != 'NULL' AND `Schoolyear` = '2013-2014'
) results
GROUP BY AppID
ORDER BY SUM(relevance) DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.