我有两张表,一张来自去年和当年的一张。
我需要得到每个表的总数,然后比较并获得去年计数的百分比,然后按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%
提前谢谢
杰森
答案 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