【发布时间】:2011-06-03 02:26:16
【问题描述】:
我正在尝试找出一种使用 group by 函数返回结果的方法。
GROUP BY 按预期工作,但我的问题是:是否可以通过忽略 NULL 字段来创建组。这样它就不会将 NULL 组合在一起,因为我仍然需要指定字段为 NULL 的所有行。
SELECT `table1`.*,
GROUP_CONCAT(id SEPARATOR ',') AS `children_ids`
FROM `table1`
WHERE (enabled = 1)
GROUP BY `ancestor`
所以现在假设我有 5 行并且祖先字段为 NULL,它返回我 1 行....但我想要全部 5。
【问题讨论】:
-
您可以使用
GROUP BY COALESCE(GroupingColumn, PrimaryKey),可能需要对数据类型、复合 PK 等进行一些调整。 -
@Tomalak Geret'kal:Joe Celko 引用:“在 SQL 中,当你执行 GROUP BY 时,你会得到一个分区,并且 NULL 都被放入一个组中。这在ANSI X3H2 委员会。如果我们使用严格相等,每个 NULL 将是它自己的类,事情会一团糟。所以我们发明了分组。分组对于许多查询很方便,而不仅仅是聚合函数。它具有很好的属性我们回到二值逻辑 (2VL),我们喜欢这样。”
-
建议:删除行
WHERE ancestor is NOT NULL,然后删除UNION行WHERE ancestor is NULL,使用children_ids的适当默认值。我认为这样的查询会更容易维护。 -
@onedaywhen:这是个好主意。