MySQL 过滤空值并符合 ONLY_FULL_GROUP_BY 的聚合函数

MySQL aggregate function to filter nulls and conform with ONLY_FULL_GROUP_BY

我有一条记录连接到 N 个其他表,并从每个表中提取一个列。我想将这些提取的列的所有 N 放在一条记录中。

下图建好后,似乎可以轻松进入第二步,然后我应该可以使用聚合函数过滤掉NULL。我四处寻找类似 GROUP_COALESCE 的东西,但我找不到可以实现这一点的东西。

我这里有一个 fiddle 不幸的是,它可以工作,因为 MySQL 会让你 select 不在 GROUP BY 中的列,而没有你自己的聚合危险 http://sqlfiddle.com/#!9/304992/1/0.

有没有一种方法可以确保它总是 select记录中的列(如果记录存在)?

最终结果应该是每组一条记录,每列将包含该组成功加入的唯一行内的值。

如果我没听错,您可以只对来自连接表的列使用聚合函数。聚合函数忽略空值,因此,由于每一列和每一组都有两个空值和一个非空值,这将 return 预期输出(同时符合 ONLY_FULL_GROUP_BY 选项)。

SELECT 
    group_table_id, 
    MAX(t1.v) t1_v,
    MAX(t2.v) t2_v,
    MAX(t3.v) t3_v
FROM group_table
LEFT JOIN t1 ON t1.group_id = group_table_id
LEFT JOIN t2 ON t2.group_id = group_table_id
LEFT JOIN t3 ON t3.group_id = group_table_id
GROUP BY group_table_id