mysql - 如何将数据库中相同的 ALIKE 条目视为 Group By 中的条目

标签 mysql database

我正在尝试编写一个Mysql查询,将数据库中所有相同的条目分组为一个。我有一个具有不同颜色名称的数据库,数据库中的条目就像

Contract        Color

OG-46374    I.Khaki
OG-46375    I-KHAKI
OG-46376    I KHAKI
OG-46377    W Ocher
OG-46378    W.Ocher

现在的问题是我的数据库将所有这些值视为不同的条目,而我无法处理或强制运算符(operator)写入确切的值,我如何将所有“I Khaki”和 W ocher 颜色视为组中不同的颜色按条款 我的 Sql 查询有点像

SELECT 
    *,
    ROUND(SUM(meter_yard_length), 0) AS TotaL_Length_Contract,
    ROUND(SUM(IF(quality = 'A', meter_yard_length, 0)),
            0) AS A_Quality_length,
    ROUND(SUM(IF(quality = 'B', meter_yard_length, 0)),
            0) AS B_Quality_length GROUP BY r.contract_no, r.color DESC;

请告诉通用解决方案,因为我有很多可能性,例如“I*khaki”“I--Khaki”等,我无法通过替换等控制所有这些

最佳答案

此答案基于您提供的非常有限的样本数据。我发现颜色名称有两个问题。首先,并非所有字母总是大小写相同。其次,在给定位置可能有空格、句点或破折号,而实际上这三个都代表相同的逻辑名称。我们可以尝试使用REPLACE将点和破折号转换为空格,然后使用LOWER()来处理大小写问题。

SELECT 
    contract_no,
    LOWER(REPLACE(REPLACE(color, '.', ' '), '-', ' '))
    ROUND(SUM(meter_yard_length), 0) AS TotaL_Length_Contract,
    ROUND(SUM(IF(quality = 'A', meter_yard_length, 0)),
        0) AS A_Quality_length,
    ROUND(SUM(IF(quality = 'B', meter_yard_length, 0)),
        0) AS B_Quality_length
FROM yourTable
GROUP BY
    contract_no,
    LOWER(REPLACE(REPLACE(color, '.', ' '), '-', ' '));

Demo

关于mysql - 如何将数据库中相同的 ALIKE 条目视为 Group By 中的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55759636/

相关文章:

具有内置数据保留功能的数据库(可能是 noSQL)

php - mysql_query 说 sql 语法错误,但相同的查询在 mysql 客户端中工作正常

mysql - 选择全部并集 - 为两个字段选择始终为零

c++ - 了解文件页面管理器程序的功能

mysql - 外键等于 Null

sql - 使用 SQL 语句获取数据库中的字段数?

java - 如何使用 JDBC 从远程计算机访问 WAMP 数据库?

php - 如何为 joomla 3 自定义字段传递类别 ID

mysql - SELECT INTO OUTFILE 无法写入文件

java - 从集合中选择/选择,即 mongoDB gridFS 的 block 或文件。我们可以在什么基础上做出这个决定?