如何遍历指定编码列表统计MySQL表中各编码的有效出现次数
无需循环的高效解决方案
你完全不用写循环,一条SQL就能搞定所有编码的统计,效率比循环高得多:
SELECT Items.Itmcode, COUNT(*) AS `Total Items Sold` FROM Items WHERE Items.Itmcode IN ('abc123', 'bdg432', 'eds321', 'hgd765', 'fds987', 'tdq343') AND Items.ItmStatus > 2 GROUP BY Items.Itmcode
代码说明:
- 用
IN替代逐个等于判断,一次性指定所有要查询的编码 GROUP BY Items.Itmcode会自动按编码分组,统计每组符合条件的记录数- 结果会直接返回每个编码对应的销售总数,不用逐个执行查询
补充:如果需要显示列表中所有编码(包括没有符合条件记录的编码,计数为0)
如果有些编码没有满足ItmStatus > 2的记录,上面的SQL不会返回这些编码。要是想让所有列表里的编码都显示,哪怕计数是0,可以用子查询生成编码列表再左连接:
WITH ItemCodes AS ( SELECT 'abc123' AS Itmcode UNION ALL SELECT 'bdg432' UNION ALL SELECT 'eds321' UNION ALL SELECT 'hgd765' UNION ALL SELECT 'fds987' UNION ALL SELECT 'tdq343' ) SELECT ic.Itmcode, COUNT(i.Itmcode) AS `Total Items Sold` FROM ItemCodes ic LEFT JOIN Items i ON ic.Itmcode = i.Itmcode AND i.ItmStatus > 2 GROUP BY ic.Itmcode
这个写法会确保列表里的每个编码都出现在结果中,没有符合条件的记录时计数为0。
内容的提问来源于stack exchange,提问作者RonCollins52
相关产品推荐
相关产品推荐

