如何获得比较mysql中两个表的计数和百分比

时间:2013-04-29 00:01:48

标签: mysql count percentage

我有两张表,一张来自去年和当年的一张。

我需要得到每个表的总数,然后比较并获得去年计数的百分比,然后按ID分组。

Table2012

ID  Cate
1     a
1     b
1     c
2     a
2     b
2     c
3     c
3     e

Table2013

ID   Cate
1     a
1     b
2     a
2     b
2     c
3     c
3     e
2     r
2     t
3     d
3     g

必填报告结果

ID   total2012    total2013    percentage
1       3              2            66%
2       3              5           167%
3       2              4           200%

提前谢谢

杰森

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT a.id,
       a.total2012,
       b.total2013,
       (b.total2013 / a.total2012 * 100) AS percentage
FROM
    (SELECT id, Count(*) AS total2012
     FROM Table2012
     GROUP BY id) a,
    (SELECT id, Count(*) AS total2013
     FROM Table2013
     GROUP BY id) b
WHERE a.id = b.id

修改

这首先通过每个表中的`id˙对条目进行分组并对分组的行进行计数来实现。之后,它将这两个结果连接起来并将其选择为单个结果集,同时计算百分比。

显然这不适用于非常老的MySQL版本(不支持子选择)

答案 1 :(得分:0)

这个答案是根据Carko的回答编辑的。

资料表

ID    Cate    Year
1     a       2012
1     b       2012
1     c       2012
2     a       2012
2     b       2012
2     c       2012
3     c       2012
3     e       2012
1     a       2013
1     b       2013
2     a       2013
2     b       2013
2     c       2013
3     c       2013
3     e       2013
2     r       2013
2     t       2013
3     d       2013
3     g       2013

修改 **
这个SQL由eggyal提供(见下面的评论)
在>>中查看http://sqlfiddle.com/#!2/a8522/1/0

这是一个更好的SQL语句:

SELECT   ID,
         SUM(Year=2012) AS total2012,
         SUM(Year=2013) AS total2013,
         100*SUM(Year=2013)/SUM(Year=2012) AS percentage
FROM     TableData
GROUP BY ID

编辑结束 **

以下是本答复中的原始SQL语句,效率非常低。的xD

SELECT a.ID,
       a.total2012,
       b.total2013,
       (b.total2013 / a.total2012 * 100) AS 'percentage'
FROM
    (SELECT ID, Count(*) AS total2012
     FROM `TableData` WHERE `Year` = 2012
     GROUP BY ID) a,
    (SELECT ID, Count(*) AS total2013
     FROM `TableData` WHERE `Year` = 2013
     GROUP BY ID) b
WHERE a.ID= b.ID