我在 SQL(MySQL) 中的数据导入脚本中遇到问题,我需要按类型对行进行分组以计算每种类型有多少行。到目前为止,这并不是一个真正的问题,因为我知道我可以做到:
SELECT
data.type,
COUNT(data.type)
FROM data
GROUP BY data.type;
因此,通过这样做,我得到了结果:
-------------- --------- | 类型 | 计数(数据类型)| |--------------|----------| | 0 | 1 | | 1 | 46 | | 2 | 35 | | 3 | 423 | | 4 | 64 | | 5 | 36 | | 9 | 1 | -------------- ---------
我知道在类型列中,值将始终在 0 到 9 的范围内,就像上面的结果一样。因此,我不仅想列出表内容中的现有值,还想列出缺失的类型值,并将它们的 COUNT 值设置为 0。
根据上述查询结果,预期结果为:
-------------- --------- | 类型 | 计数(数据类型)| |--------------|----------| | 0 | 1 | | 1 | 46 | | 2 | 35 | | 3 | 423 | | 4 | 64 | | 5 | 36 | | 6 | 0 | | 7 | 0 | | 8 | 0 | | 9 | 1 | -------------- ---------
我可以在 GROUP/COUNT-1 表内容之前巧妙地插入每种类型的一行,在 INSERT 上标记其他列以便能够在之后删除这些行。因此,我的导入脚本的步骤将更改为:
- TRUNCATE表;(如果表中有旧数据,我无法安全导入新内容)
- 插入“控制”行;
- 将数据文件加载到表中;
- GROUP/COUNT-1表格内容;
- 删除“控制”行;(所以我仍然可以使用表格内容)
- 做任何其他工作;
但是,我正在寻找一种更清洁的方法来达到预期的结果。如果可能,单个查询,没有一堆 JOIN。
我将不胜感激任何建议或意见。非常感谢你!
编辑
我要感谢有关创建表以存储所有类型以加入它的答案。它确实解决了问题。我的方法也解决了它,但它是否像您一样存储类型。
所以,我有“另一个”问题,只是一个澄清,基于收到的答案和我想要的范围......是否有可能使用一些不会创建新表和/或插入这些类型的 MySQL 命令达到预期结果?
实际上,在解决存储类型的问题时,我看不到任何问题...我只想找到一个简化的命令...类似于“最佳实践”...某种过滤器...作为我可以运行:
GROUP BY data.type(0,1,2,3,4,5,6,7,8,9)
它可以返回这些过滤后的值。
如果它真的存在/可能的话,我真的很想学习这样的命令。
再次,非常感谢您!