MySQL:用组中的任何非空值填充空字符串

问题描述

这是一个A.cpp(简化):

tests

我需要用其组中的任何非空值填充空的 ------------------------- | id | test_name | unit | ------------------------- | 1 | Voltage | V | | 2 | Current | | | 3 | Frequency | Hz | | 4 | Voltage | v | | 5 | Voltage | | | 6 | Voltage | V | | 7 | Current | A | | 8 | Voltage | V | ------------------------- 字段(通过 unit),即 test_name 的单位可能是 VoltageVv 应该是 Current。有没有办法用 A 或类似的东西来做到这一点?

解决方法

这应该有效:

UPDATE tests AS t1 JOIN tests AS t2 USING (test_name)
SET t1.unit = t2.unit
WHERE t1.unit IS NULL AND t2.unit IS NOT NULL;
,

使用此查询(适用于 MySql 5.7+):

SELECT test_name,ANY_VALUE(unit) unit
FROM tests
WHERE unit IS NOT NULL
GROUP BY test_name

您会为每个 test_name 获得一个非空 unit(前提是此 unit 至少有 1 个非空 test_name)。

UPDATE 语句中将其加入表:

UPDATE tests t1
INNER JOIN (
  SELECT test_name,ANY_VALUE(unit) unit
  FROM tests
  WHERE unit IS NOT NULL
  GROUP BY test_name
) t2 ON t2.test_name = t1.test_name
SET t1.unit = t2.unit
WHERE t1.unit IS NULL;

参见demo

您可以使用 ANY_VALUE()MIN() 代替 MAX()