将两列分组,计算另一列中的相应值,并将计数放在两列中

时间:2014-11-01 03:56:55

标签: mysql sql database count

我已经离开数据库游戏一段时间了,所以我有点生疏,但最近我遇到了以下问题,我认识的其他任何人都无法帮助我:

之前:

nm, lt, size
1, a, sm
1, b, lg
1, a, sm
1, b, lg
2, a, sm
2, a, lg

后:

num, let, sm, lg
1, a, 2, 0
1, b, 0, 2
2, a, 1, 1

我的数据类似于上面的例子。 尺寸列只能是两个值中的一个。我需要一个查询来将 nm lt 列视为复合键。也就是说,每个组合应该是唯一的,即使它们是分开的,并且相应的大小值的计数应该放在它们各自的列中。

我的示例和我的实际数据库之间的唯一区别是 nm lt 列的格式,它们包含更大的数字,导致超过5,000个唯一组合,以及有大约100万行需要记录并放在 lg 和/或 sm 列中。

如果我的解释有点复杂,我很抱歉,希望这个例子足够了。任何帮助或见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

select  nm,
    lt,
    SUM(case when size = 'sm' then 1 else 0 end) as 'sm',
    SUM(case when size = 'lg' then 1 else 0 end) as 'lg'
from testtable
group by nm,lt;