繁体   English   中英

SQL查询未从sum()返回正确的数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM