首页 > 解决方案 > 在不使用 GROUP BY 的情况下标记重复值 MySQL

问题描述

您能否帮助在附加列中标记重复值而不对重复值进行分组?

请参阅我的示例数据(例如我拥有的以及右侧需要实现的示例):

在此处输入图像描述

如您所见,我的产品 ID 带有后缀E(电源)和G(气体)。一些产品 ID 是重复的:相同的产品 ID - 一个带有E和第二个带有GDual Product

仅带有E的产品 ID 生成Power_Only_product,仅带有G的产品 ID生成 Gas_Only_product,具有EG的相同产品 ID 生成Dual Product

棘手的事情是在正确的站点上添加一个列,其中包含 ID 是双产品的信息,哪个是仅供电或仅燃气。

你能帮我在不分组产品 ID 的情况下获得这样的列吗?先感谢您!帕维尔

标签: mysqlsqlselectduplicates

解决方案


如果您正在运行 MySQL 8.0,则可以仅使用窗口函数执行此操作,而无需连接、子查询或 CTE。

我建议只比较每个客户的最大值和最小值product;当它们不同时,您就有了“双重产品”。

select
    t.*,
    case when min(product) over(partition by customer_account) <> max(product) over(partition by customer_account)
        then 'Dual Product' 
        else concat(product, ' Only')
    end single_or_dual_product
from mytable t

推荐阅读