Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-根据两个表计算净费用_Mysql_Join_Subquery - Fatal编程技术网

MySQL-根据两个表计算净费用

MySQL-根据两个表计算净费用,mysql,join,subquery,Mysql,Join,Subquery,提前感谢您的帮助。我是SQL新手,在这个网站和谷歌上的许多其他网站上都看过一些相关的帖子,但我还没有弄清楚我做错了什么。我查看了子选择、各种连接选项,并不断遇到错误的解决方案/结果。 我有两个表要查询 Table:Doctors idDoctors PracticeID FirstName LastName Table: Vendor Sales Id ProductSales SalesCommission DoctorFirstName DoctorLastName 以下是我正在努力解

提前感谢您的帮助。我是SQL新手,在这个网站和谷歌上的许多其他网站上都看过一些相关的帖子,但我还没有弄清楚我做错了什么。我查看了子选择、各种连接选项,并不断遇到错误的解决方案/结果。 我有两个表要查询

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;