【问题标题】:SQL - Using COUNT in a SUM querySQL - 在 SUM 查询中使用 COUNT
【发布时间】:2014-05-20 12:50:47
【问题描述】:

好的,这是我的数据库

Patient(PatID, GName, FName, Suburb, PhNo InsurNo)  
Doctor(DocID, DocName, DocSpec, Cost)  
Appointment(AppID, AppTimeDate, PatID*, DocID*)  
Meds(MedID, MedName, Purpose, Admin, AppID*)  
Tests(TestID, TestName, TestResult, TestDate, PatID*)  
DocPat(PatID*, DocID*)  

我被要求显示所有预约总费用高于平均水平的医生姓名。

到目前为止我有:

SELECT d.DocName, sum((NO_OF_APPS)*DocCost)    
from doctor d, (select count(AppID) as NO_OF_APPS  
                from appointment  
                group by DocID)  
group by DocName;

尝试使用 sum(count(appID)*DocCost) 我知道我是从错误的角度来的,有人能解释一下吗?

已进行纠正调整:

SELECT d.DocName, d.docCost*COUNT(ap.AppID) as totalCost  
from doctor d  
left join appointment ap on ap.DocID=d.DocID  
GROUP BY d.DocID  
ORDER BY d.DocName  
HAVING totalCost > AVG(totalCost);

收到'00933。 00000 - Oracle SQL developer V4 上的“SQL 命令未正确结束”

【问题讨论】:

  • 问号你使用的数据库正确,不是全部

标签: mysql sql sql-server database ms-access


【解决方案1】:

使用连接而不是子选择,它更清晰,通常工作得更快。要分析聚合结果,您可以使用 HAVING 子句。这是一个例子:

SELECT d.DocName, d.Cost*COUNT(a.AppID) as totalCost
from doctor d
left join appointment a on a.DocID=d.DocID
GROUP BY d.DocName
HAVING d.Cost > average(d.Cost);
ORDER BY d.DocName

【讨论】:

  • 删除了我的答案,因为我忽略了平均值。但请注意,此处的平均值基于 DocCost - 而应该是总成本的平均值
  • 这可能是真的,恐怕我没有完全理解。修复它应该很容易,例如总成本 > 平均(总成本)。我说的对吗?
  • 非常感谢您的帮助!我已经进行了这些调整,但运气不佳……总成本的标识符无效。 SELECT d.DocName, d.docCost*COUNT(ap.AppID) as totalCost from doctor d left join ap on ap.DocID=d.DocID GROUP BY d.DocID HAVING totalCost > AVG(totalCost);
  • 所以按照上面的说明,我输入了'HAVING totalCost > AVG(totalCost);'在第 5 行并收到错误“SQL 命令未正确结束”
  • 你能发布你的整个查询吗?您使用哪种 SQL?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
相关资源
最近更新 更多