MySQL-根据两个表计算净费用
提前感谢您的帮助。我是SQL新手,在这个网站和谷歌上的许多其他网站上都看过一些相关的帖子,但我还没有弄清楚我做错了什么。我查看了子选择、各种连接选项,并不断遇到错误的解决方案/结果。 我有两个表要查询MySQL-根据两个表计算净费用,mysql,join,subquery,Mysql,Join,Subquery,提前感谢您的帮助。我是SQL新手,在这个网站和谷歌上的许多其他网站上都看过一些相关的帖子,但我还没有弄清楚我做错了什么。我查看了子选择、各种连接选项,并不断遇到错误的解决方案/结果。 我有两个表要查询 Table:Doctors idDoctors PracticeID FirstName LastName Table: Vendor Sales Id ProductSales SalesCommission DoctorFirstName DoctorLastName 以下是我正在努力解
Table:Doctors
idDoctors
PracticeID
FirstName
LastName
Table: Vendor Sales
Id
ProductSales
SalesCommission
DoctorFirstName
DoctorLastName
以下是我正在努力解决的问题:
SELECT t1.PracticeID
, SUM( t2.ProductSales ) AS Total_Sales
, COUNT( t1.LastName ) AS Doctor_Count
, COUNT( t1.LastName ) *150 AS Dues
, SUM( t2.ProductSales * t2.SalesCommission ) AS Credit
FROM Doctors AS t1
JOIN VendorSales AS t2 ON t1.Lastname = t2.DoctorLastName
GROUP BY t1.PracticeID
LIMIT 0 , 30
查询的目的是计算机构所欠的净应付款。我还没有试图计算净金额,只是试图得到正确的初步计算
结果(本例仅限一个结果)
结果应该是这样的:
PracticeID Total_Sales Doctor_Count Dues Credit
Practice A 16583.04 3 450 304.07360
问题是总销售额与总销售额交易记录相加(在本例中,4个销售分录总计16584.04)。4笔销售中的每一笔都有一个相关的佣金率。贷方金额为佣金总额。销售和信用数据准确无误。但医生人数应为3(执业医生人数)。会费应为450美元(150x3)。但正如你所看到的,它是乘以4而不是3。
我需要在查询中更改什么才能获得正确的计算结果(医生和会费乘以3而不是4?或者我应该以不同的方式执行此操作?再次感谢。您的模式有各种奇怪的地方,您没有提供示例数据来证明您的断言值 第一个奇怪之处是,在医生表和供应商销售表中,您都有医生的名字和姓氏,但您仅以姓氏加入。接下来,在医生表中,您似乎有一个ID列,但在供应商销售表中,您没有将其用于加入列 不清楚每个医生在供应商销售表中是否有一个条目,或者是否可以有多个条目。考虑到您描述的计数问题,我们必须假设每个医生在供应商销售表中可以有多个条目。也不清楚在何处识别供应商,但我们必须假设这与问题无关 因此,您需要的一组数据是每个机构的医生人数和费用(即每个医生150个货币单位)
SELECT PracticeID, COUNT(*) AS NumDoctors, COUNT(*) * 150 AS Dues
FROM Doctors
GROUP BY PracticeID
然后我们需要每个机构的总销售额,以及信用:
SELECT t1.PracticeID, SUM(t2.ProductSales) AS Total_Sales,
SUM(t2.ProductSales * t2.SalesCommission) AS Credit
FROM Doctors AS t1
JOIN VendorSales AS t2 ON t1.Lastname = t2.DoctorLastName
GROUP BY t1.PracticeID
这两个部分答案需要在PracticeID上结合起来,以产生最终结果:
SELECT r1.PracticeID, r1.NumDoctors, r1.Dues,
r2.Total_Sales, r2. Credit
FROM (SELECT PracticeID, COUNT(*) AS NumDoctors, COUNT(*) * 150 AS Dues
FROM Doctors
GROUP BY PracticeID) AS r1
JOIN (SELECT t1.PracticeID, SUM(t2.ProductSales) AS Total_Sales,
SUM(t2.ProductSales * t2.SalesCommission) AS Credit
FROM Doctors AS t1
JOIN VendorSales AS t2 ON t1.Lastname = t2.DoctorLastName
GROUP BY t1.PracticeID) AS r2
ON r1.PracticeID = r2.PracticeID;
我相信这会让你得到你想要的结果。但这是未经测试的SQL-尤其是因为你没有给我们提供适当的样本数据来处理。为糟糕的格式道歉。你做到了!!!!非常感谢解决方案,感谢那些帮我清理了这篇文章的糟糕工作的人。@tjackeddy:很高兴我能够阅读b请注意,在StackOverflow和相关网站上,你表达感谢的方式是对任何有帮助的答案投弃权票,并接受在某种程度上给你最大帮助的答案。(通过接受答案,你会得到一些分数。)
SELECT r1.PracticeID, r1.NumDoctors, r1.Dues,
r2.Total_Sales, r2. Credit
FROM (SELECT PracticeID, COUNT(*) AS NumDoctors, COUNT(*) * 150 AS Dues
FROM Doctors
GROUP BY PracticeID) AS r1
JOIN (SELECT t1.PracticeID, SUM(t2.ProductSales) AS Total_Sales,
SUM(t2.ProductSales * t2.SalesCommission) AS Credit
FROM Doctors AS t1
JOIN VendorSales AS t2 ON t1.Lastname = t2.DoctorLastName
GROUP BY t1.PracticeID) AS r2
ON r1.PracticeID = r2.PracticeID;