计算重复的值,并按ID将它们累加成百万条记录

时间:2018-08-25 23:52:15

标签: mysql sql pivot pivot-table

我有以下问题-

具有以下格式的数百万条记录的表-

Scale   ID 
01      2001
01      2001
03      2002
05      2003
78      2011
76      2010

so on .. 

规模范围为01-100,ID范围为2001-2011。

我想要一个新的表格来计算每年的每个比例。

输出应该是这样的。

Scale 2001  2002  2003  2004 ---- 2011
1     2      0     0     0   ----  0
2     0      0     0     0  ------ 0
3     0      1     0     0  ------- 0
4     0      0     0     0  ------ 0
5     0      0     1     0  ------ 0
-
-
-
-  
100 

尝试在SQL中完成。 任何帮助都会很棒。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用条件聚合。

  • scale分组。

  • 在列列表中,使用CASE检查ID是否具有要在该列中显示的值。如果有,则返回任何非null值(例如1)。将count()包裹在其周围。由于count()将不计算NULL,并且CASE默认返回NULL,因此当没有其他匹配项时,它将仅计算ID具有相应值的出现次数。 / p>

赞:

SELECT `scale`,
       count(CASE `id`
               WHEN 2001 THEN
                 1
             END) `2001`,
       ...
       count(CASE `id`
               WHEN 2011 THEN
                 1
             END) `2011`
       FROM `elbat`
       GROUP BY `scale`
       ORDER BY `scale`;

答案 1 :(得分:1)

如果您使用的是MySQL,则需要采用困难的方式...

SELECT scale, 
    SUM(CASE WHEN id=2001 THEN 1 ELSE 0) AS `2001`,
    SUM(CASE WHEN id=2002 THEN 1 ELSE 0) AS `2002`,
    SUM(CASE WHEN id=2003 THEN 1 ELSE 0) AS `2003`,
    ...
    SUM(CASE WHEN id=2011 THEN 1 ELSE 0) AS `2011`
FROM mytable
GROUP BY scale