按 varchar 字段的一部分分组

Posted

技术标签:

【中文标题】按 varchar 字段的一部分分组【英文标题】:Group by part of varchar field 【发布时间】:2020-08-08 12:42:36 【问题描述】:

我有一个代表产品库存的 SQL 表。假设它看起来像这样

id - product - quantity
------------------------
1 -  water 1L  - 2
2 -  Coke 1L   - 3
3 -  water 5L  - 7
4 -  water 10L - 1
5 -  Coke 2L   - 3

我想知道我有多少瓶库存,是否可以在不添加包含产品类型的列的情况下这样做并得到类似的结果

water - sum(quantity)
Coke  - sum(quantity)

【问题讨论】:

而不是需要的列,您应该有一个孔表,它引用需要的列,还有一个用于尺寸和可能用于瓶或罐类型的孔表... 【参考方案1】:

如果产品列的数据格式在整个表格中是固定的(所有产品名称都由一个单词组成,除了Liter部分),那么使用

SELECT SUBSTRING_INDEX(product,' ',1) AS product_common_def , SUM(quantity) AS quantity
  FROM tab
 GROUP BY product_common_def

Demo

【讨论】:

以上是关于按 varchar 字段的一部分分组的主要内容,如果未能解决你的问题,请参考以下文章

MySql (MariaDB)的varchar字段的存储的是字符还是字节

在 MySQL 中对 varchar 字段进行数字排序

限制按列分组

如何在 MySQL 中使用 LIKE 和部分匹配的 VARCHAR 字段的索引?

mysql与oracle 表字段定义比较

Varchar 字段上的 MySQL 唯一索引 - 优点和缺点?