mysql - 在不使用 GROUP BY 的情况下标记重复值 MySQL
问题描述
您能否帮助在附加列中标记重复值而不对重复值进行分组?
请参阅我的示例数据(例如我拥有的以及右侧需要实现的示例):
如您所见,我的产品 ID 带有后缀E(电源)和G(气体)。一些产品 ID 是重复的:相同的产品 ID - 一个带有E和第二个带有G是Dual Product。
仅带有E的产品 ID 生成Power_Only_product,仅带有G的产品 ID生成 Gas_Only_product,具有E和G的相同产品 ID 生成Dual Product。
棘手的事情是在正确的站点上添加一个列,其中包含 ID 是双产品的信息,哪个是仅供电或仅燃气。
你能帮我在不分组产品 ID 的情况下获得这样的列吗?先感谢您!帕维尔
解决方案
如果您正在运行 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
推荐阅读
- google-maps - 当应用程序在前台或后台反应原生时如何调用函数?
- ios - 如何在 Google MapView iOS 中设置固定标记位置
- java - 从 Oauth 不记名令牌中提取角色
- android - 如何修复进程'命令'.../sdk/build-tools/29.0.0/aapt''以非零退出值134完成
- algorithm - 在 B Plus 树中删除后,索引中的键会被删除吗?
- swift - SwiftUI - 设置视图框架
- c - 如何从另一个线程调用 Gtk API?
- c# - 如何修复我的纵横比 if 语句
- sql - 将模板数据集复制到同一个表中
- c# - 在 c# / oracle12 中删除 MS Word 自动格式化字符