如何用SQL按产品编号分组统计货架-货箱组合的样本瓶数量?
问题背景
现有存储样本瓶位置的数据集,包含Product_number(产品编号)、Rack(货架)、Box(货箱)、Slot(插槽)列。需要统计每个产品编号下,不同货架+货箱组合对应的样本瓶数量,最终输出列需包含Product_number、Rack、Box、Number_of_vials(样本瓶数量)。
踩坑记录
之前尝试用COUNT(DISTINCT CONCAT(Rack, Box))来实现,结果不符合预期,问题根源在于数据中存在大量空值:当Rack或Box为空时,CONCAT结果会变成空字符串,导致不同的空值位置被错误归为同一组,无法准确拆分货架和货箱的组合。
正确解决方案
直接使用多列GROUP BY,同时按Product_number、Rack、Box三个字段分组,再统计每组的样本瓶数量。SQL语句如下:
SELECT Product_number, Rack, Box, COUNT(*) AS Number_of_vials FROM your_sample_table -- 替换为你的实际表名 GROUP BY Product_number, Rack, Box;
补充说明
- 多列GROUP BY会严格按照
Product_number相同、Rack相同、Box相同的规则分组,空值也会被正确识别(SQL中空值在GROUP BY中会被视为相等的分组依据,符合样本存储的业务逻辑)。 - 如果
Slot为空代表无样本瓶,可将COUNT(*)改为COUNT(Slot),这样会自动忽略Slot为空的行,统计实际有样本的数量。
内容的提问来源于stack exchange,提问作者andrew shearer
相关产品推荐
相关产品推荐

