mysql - 如何在 MySQL 中添加行并返回其中之一
问题描述
我需要在 HomeID 列中检索具有数字或空值的行,如果存在具有相同符号的行,则最终返回具有数字值的值
// my table
+--------+---------+-------+
| Symbol | Home ID | Value |
+--------+---------+-------+
| test | 1 | value |
| test | NULL | value |
| test1 | 2 | value |
| test2 | 3 | vlaue |
+--------+---------+-------+
事实上,我做过类似的事情。它为我添加了符号,但我不知道如何返回我需要的诗
SELECT
[Symbol],
COUNT(*) AS CNT
FROM [DB].[dbo].[Table]
GROUP BY
[Symbol]
HAVING COUNT(*) > 1;
解决方案
一种方法是:
select t.*
from t
where t.homeid is not null or
not exists (select 1
from t t2
where t2.symbol = t.symbol and t2.homeid is not null
);
如果您只有这三列并且每个符号只需要一行,您也可以使用聚合来执行此操作:
select symbol, max(homeid) as homeid,
coalesce(max(case when homeid is not null then value end),
max(value)
) as value
from t
group by symbol;
推荐阅读
- java - 是否可以设置 Jackson 以将未命名的包装器对象排除到 API 返回的 JSON 数组中?
- c# - 从 Mat 的特定值创建蒙版(在 EMGU 中)
- android - 为什么 child.layout() 的第三个和第四个参数都带有前缀?
- arrays - 在 react-quiz-component 依赖中控制 questionPic 的大小?
- c# - C# 将 if 检查添加到代码块(我没有经验,需要帮助)
- android - 多层建筑中的空间定位,无需在建筑物中安装传感器
- android - 用于 android 的 ML-Kit 人脸检测是否支持 GPU 加速?
- docker - 如何在 WSL + Docker + VS Code 设置中防止用户冲突
- github-codereviews - 要求审查全同态加密库
- apache-flink - Apache flink 从后期窗口访问键控状态