我在SQL(MySQL)的数据导入脚本中遇到了一个问题,需要按类型对行进行分组以计数每个类型有多少行。迄今为止,这并不是真正的问题,因为我知道可以这样做:
SELECT
data.type,
COUNT(data.type)
FROM data
GROUP BY data.type;
所以,通过这样做,我得到了如下结果:
-------------- --------------------- | type | COUNT(data.type) | |--------------|---------------------| | 0 | 1 | | 1 | 46 | | 2 | 35 | | 3 | 423 | | 4 | 64 | | 5 | 36 | | 9 | 1 | -------------- ---------------------我知道在type列中的值始终在0到9的范围内,就像上面的结果一样。因此,我希望不仅列出表格内容中存在的值,还要列出缺失的type值,并将它们的COUNT值设置为0。
根据上面的查询结果,期望的结果应该是:
-------------- --------------------- | type | COUNT(data.type) | |--------------|---------------------| | 0 | 1 | | 1 | 46 | | 2 | 35 | | 3 | 423 | | 4 | 64 | | 5 | 36 | | 6 | 0 | | 7 | 0 | | 8 | 0 | | 9 | 1 | -------------- ---------------------我可以巧妙地在按组/计数表格内容之前插入每个类型的一行,并在INSERT时标志其他列以能够在DELETE后删除这些行。因此,我的导入脚本的步骤将变为:
- TRUNCATE table;(如果表中有旧数据,则无法安全地导入新内容)
- INSERT "control" rows;
- LOAD DATA INFILE INTO TABLE;
- GROUP/COUNT-1 the table content;
- DELETE "control" rows;(因此我仍然可以使用表格内容)
- 执行任何其他作业;
我将非常感谢任何建议或建议。非常感谢!
编辑
谢谢关于创建一个表以存储所有类型并加入它的答案。它确实解决了问题。我的方法也可以解决它,但是它会存储类型,就像您所做的那样。
因此,我有“另一个”问题,只是一个澄清,基于收到的答案和我希望的范围...是否有可能通过某些MySQL命令而不是创建新表来达到期望的结果? /或插入这些类型?
实际上,我并没有看到存储类型来解决我的问题有任何问题...我只是想找到一个简化的命令...像'最佳实践'那样...某种过滤器...就像我可以运行的:
GROUP BY data.type(0,1,2,3,4,5,6,7,8,9)
它可以返回这些被过滤的值。
如果这个命令真的存在/可行,我很有兴趣学习它。
再次感谢您!