计算重复值并按id求和,得到一百万条记录

yi0zb3m4  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(299)

这个问题在这里已经有答案了

如何在mysql中返回pivot表输出(9个答案)
两年前关门了。
我有以下问题-
包含数百万条记录的表格,格式如下-

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来实现。任何帮助都会很好。
谢谢

0s7z1bwu

0s7z1bwu1#

如果你用的是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
btxsgosb

btxsgosb2#

可以使用条件聚合。
分组依据 scale .
在列列表中使用 CASE 检查id是否具有要在该列中显示的值。如果有,则返回任何非空值(例如。 1 ). 包裹 count() 围绕着它。作为 count() 不算数 NULL s、 以及 CASE 退货 NULL 默认情况下,当没有其他匹配项时,它将只统计id具有相应值的事件。
这样地:

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`;

相关问题