我认为我缺少一些关于如何有效使用 GROUP BY 消除冗余记录的基本知识。我不断遇到似乎需要使用 COALESCE 的地方,但据我所知,这不适用于 GROUP BY。
示例:我有一个表,其中包含访问 ID 和访问帐单代码的每种组合以及其他有用信息:
VisitID SearchRank1 SearchRank2 BillingID
--------------------------------------------------
1 34 NULL 3432
1 34 NULL 3467
2 27 8 3280
2 29 NULL 2903
我想将其折叠起来,以便每个 VisitID 只有一行。方便的是,每当有多个行在运行时,我什至很乐意只取其他列的最大非空值,这样我最终会得到如下结果:
VisitID SearchRank1 SearchRank2 BillingID
--------------------------------------------------
1 34 NULL 3467
2 29 8 3280
看起来这应该可以通过以下方式获得:
SELECT VisitID,
COALESCE(SearchRank1) AS SearchRank1,
COALESCE(SearchRank2) AS SearchRank2,
MAX(BillingID) AS BillingID
FROM Db.Table1
GROUP BY VisitID
但是当我尝试它时,我在合并行中遇到错误,我认为这只是因为我实际上无法将合并与 group by 一起使用。它是否正确?如果是这样,那么有效的方法是什么?
只需使用max()
or min()
:
SELECT VisitID,
MAX(SearchRank1) AS SearchRank1,
MAX(SearchRank2) AS SearchRank2,
MAX(BillingID) AS BillingID
FROM Db.Table1
GROUP BY VisitID;
COALESCE()
不是聚合函数。但是,聚合函数通常会忽略NULL
值,因此它们具有相似的效果。
你会使用COALESCE()
对于类似的东西:
select VisitId, coalesce(SearchRank2, SearchRank1)
from db.table1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)