【问题标题】:Group two columns, count corresponding values in another column, and put counts in two columns对两列进行分组,在另一列中计数对应的值,并将计数放在两列中
【发布时间】:2014-11-01 03:56:55
【问题描述】:

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

之前:

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

我有类似上述示例的数据。 size 列只能是两个值之一。我需要一个查询来将 nmlt 列视为复合键。也就是说,即使它们是单独的,每个组合也应该是唯一的,并且对应的 size 值的计数应该放在它们各自的列中。

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

如果我的解释有点令人费解,我深表歉意,希望这个例子就足够了。任何帮助或见解将不胜感激。

【问题讨论】:

  • 快速问题 - 您在这里有重复的行。 1, a, sm 出现两次,1, b, lg 也是如此。这不可能发生,因为正如您所说, nm 和 lt 是独一无二的。是否应该删除这些内容,或者这是您数据集中的错字?
  • 它们在第一个表中不是唯一的,我需要使它们在第二个表中唯一。第一个表有大约 100 万行,我已经知道如果我使前两列唯一,它会减少到大约 5,000。我的问题是从第一个表中获取第三行,计算并放入第二个表的第三和第四行。

标签: mysql sql database count


【解决方案1】:
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;

【讨论】:

猜你喜欢
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多