MySQL中的百分比

MySQL中的百分比,mysql,Mysql,使用此查询 SELECT company, YEAR( date ) as year, COUNT( * ) as total FROM table WHERE company = "Medtronic" OR company = "Private" GROUP BY YEAR( date ) 我有一张这样的桌子: Company year total Medtronic 1998 6 Private 1998 5 Medtronic 199

使用此查询

SELECT company, YEAR( date )  as year, COUNT( * ) as total
FROM table
WHERE company = "Medtronic"
OR company = "Private"
GROUP BY YEAR( date )
我有一张这样的桌子:

Company         year    total
Medtronic   1998    6
Private     1998    5
Medtronic   1999    5
Private     1999    1
如何计算每家公司每年缴纳的百分比

例如,美敦力在1998年的出资比例为 6/(6+5)=54.5%

我一直在尝试使用MySQL查询来计算百分比

谢谢大家。

使用:

SELECT x.company,
       x.year,
       x.annual_total
       x.annual_total / y.total AS percentage
  FROM (SELECT t.company, 
               YEAR(t.date) as year, 
               COUNT( * ) as annual_total
          FROM TABLE t
         WHERE t.company IN ('Medtronic', 'Private')
      GROUP BY YEAR( t.date ) ) x
  JOIN (SELECT t.company,
               COUNT(*) 'total'
          FROM TABLE t
         WHERE t.company IN ('Medtronic', 'Private')
      GROUP BY t.company) y ON y.company = x.company
如果希望百分比包含特定的小数位,请使用:

CAST(x.annual_total / y.total AS DECIMAL(2,2)) AS percentage
检查这是否给出了您期望的每个公司的计数:

  SELECT t.company,
         COUNT(*) 'total'
    FROM TABLE t
   WHERE t.company IN ('Medtronic', 'Private')
GROUP BY t.company
使用:

如果希望百分比包含特定的小数位,请使用:

CAST(x.annual_total / y.total AS DECIMAL(2,2)) AS percentage
检查这是否给出了您期望的每个公司的计数:

  SELECT t.company,
         COUNT(*) 'total'
    FROM TABLE t
   WHERE t.company IN ('Medtronic', 'Private')
GROUP BY t.company
我的SQL查询:

SELECT x.company, x.year, x.annual_total, CAST( x.annual_total / y.total AS DECIMAL( 2, 2 ) ) AS percentage
FROM (

SELECT t.company, YEAR( t.date ) AS year, COUNT( * ) AS annual_total
FROM my_patents AS t
WHERE t.company = 'Private'
GROUP BY YEAR( t.date )
)x
JOIN (

SELECT t.company, COUNT( * ) AS total
FROM my_patents AS t
WHERE t.company = 'Medtronic'
OR t.company = 'Private'
GROUP BY t.company
)y ON y.company = x.company
我的结果:

Private  1998  5  0.04
运行此查询时:

SELECT t.company, YEAR( date ) , COUNT( * ) AS total
FROM my_patents AS t
WHERE t.company = 'Medtronic'
OR t.company = 'Private'
GROUP BY t.company, YEAR( date )
我明白了

Medtronic  1998  6
Private  1998  5
我的SQL查询:

SELECT x.company, x.year, x.annual_total, CAST( x.annual_total / y.total AS DECIMAL( 2, 2 ) ) AS percentage
FROM (

SELECT t.company, YEAR( t.date ) AS year, COUNT( * ) AS annual_total
FROM my_patents AS t
WHERE t.company = 'Private'
GROUP BY YEAR( t.date )
)x
JOIN (

SELECT t.company, COUNT( * ) AS total
FROM my_patents AS t
WHERE t.company = 'Medtronic'
OR t.company = 'Private'
GROUP BY t.company
)y ON y.company = x.company
我的结果:

Private  1998  5  0.04
运行此查询时:

SELECT t.company, YEAR( date ) , COUNT( * ) AS total
FROM my_patents AS t
WHERE t.company = 'Medtronic'
OR t.company = 'Private'
GROUP BY t.company, YEAR( date )
我明白了

Medtronic  1998  6
Private  1998  5

抱歉,这听起来可能是个愚蠢的问题,但“x.year”中的“x”和“y.year”中的“y”以及“t.company”中的“t”代表什么?我是否用表名替换“t”,用列名替换“y”?谢谢!一点也不愚蠢
x
y
是表别名,与
t
相同。这只是一种简写,您可以使用它来引用表,而无需键入全名。当您具有相同名称的列时,以及当您将一个表连接到表本身时,这是必需的。我已经对您提供的解决方案进行了一些修改,作为下面显示的另一个答案(在注释中它看起来很糟糕),但是结果非常遥远。我在什么地方出错了吗?再一次,非常感谢。抱歉,它仍然不起作用,我将尝试查找错误并发布解决方案(如果我找到的话)。您发布的代码的最后一部分给出了每个公司的正确计数虽然=)但是,百分比是offSorry,这听起来可能是个愚蠢的问题,但是“x.year”中的“x”和“y.year”中的“y”以及“t.company”中的“t”代表什么?我是否用表名替换“t”,用列名替换“y”?谢谢!一点也不愚蠢
x
y
是表别名,与
t
相同。这只是一种简写,您可以使用它来引用表,而无需键入全名。当您具有相同名称的列时,以及当您将一个表连接到表本身时,这是必需的。我已经对您提供的解决方案进行了一些修改,作为下面显示的另一个答案(在注释中它看起来很糟糕),但是结果非常遥远。我在什么地方出错了吗?再一次,非常感谢。抱歉,它仍然不起作用,我将尝试查找错误并发布解决方案(如果我找到的话)。您发布的代码的最后一部分给出了每个公司的正确计数(虽然=),但是,%是off@SQL学生:你能举几个例子吗?未公布的百分比听起来很奇怪,尤其是如果每家公司的总数是正确的。我编辑了您的代码以删除一些语法错误,下面的第二个答案中给出了示例,thanks@SQL学生:你能举几个例子吗?没有公布的百分比听起来很奇怪,尤其是如果每家公司的总数是正确的。我编辑了你的代码以删除一些语法错误,下面的第二个答案中给出了示例,谢谢