计算MYSQL中某个值的出现次数并按ID分组

时间:2019-03-16 12:17:41

标签: mysql

我有一个包含PersonID和Code列的数据库。每个PersonID都有多个记录,每个记录都有一个代码。我想计算每个PersonID的Code出现次数等于特定值(例如,我希望Code等于“ R”的次数)。我希望它像这样退还

  

(((PersonID,Code_Count),(PersonID,Code_Count),(PersonID,   Code_Count),...)

有人可以帮助我实现这一目标吗?

谢谢。

编辑:我认为这是正确的,任何人都可以确认吗? SELECT PersonID,COUNT(*) as count FROM people WHERE Code="R" GROUP BY PersonID;

编辑:它不包括零计数,但我在下面添加了一个答案,即可解决该问题。

2 个答案:

答案 0 :(得分:0)

您快到了,但是对于任何不匹配的PersonID,您都不会得到任何行。

我还没有测试过,但是也许是这样的:

SELECT
  `PersonID`,
  SUM(CASE WHEN `Code` = "R" THEN 1 ELSE 0 END) AS `count`
FROM `People`
GROUP BY `PersonID`

通过删除条件,您不会淘汰不匹配的人物,而是with the CASE you're still only counting matching rows

您应该检查这种幼稚的方法是否可以按预期的规模使用索引。

答案 1 :(得分:0)

SELECT PersonID, CAST(SUM(CASE WHEN Code = "R" THEN 1 ELSE 0 END) AS SIGNED) AS count FROM People GROUP BY PersonID;

这完全按预期工作,感谢@LightnessRacesinOrbit的部分解决方案。

相关问题