1

我有两张桌子,一张是去年的,一张是今年的。

我需要获取每个表的总数,然后比较并获取去年计数的百分比,然后按 ID 对它们进行分组。

表2012

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

表2013

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%

先感谢您

杰森

4

2 回答 2

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 版本(不支持子选择)

于 2013-04-29T00:25:46.943 回答
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
于 2013-04-29T13:43:27.430 回答