我有以下问题-
具有以下格式的数百万条记录的表-
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中完成。 任何帮助都会很棒。
谢谢
答案 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