数据库distinct用法

2025-04-2904:31:17常识分享0

本节课的内容与数据库原理紧密相连,对于今后的学习有着承上启下的作用。希望大家能够深入理解并消化。当我们探讨表格的1对多关系时,需遵循实时参照完整性原则。简单来说,就是1端主键的唯一性和非空性,以及多端外键与1端主键的对应关系。这样的原则确保了数据的准确性和一致性。

如图所示,1端表与多端表的关系为1对多。但在实际操作中,可能会出现实时参照不匹配的情况。接下来,我们将结合具体实例进行讲解。

聚合函数CountRows常用于统计表中的行数。通过Filter或ALL全选表,我们可以调整表范围,再利用CountRows计算行数。当我们需要计算某个列去重后的行数时,就会用到Values或DISTINCT函数。

在矩阵行标题为多端表中的姓名时,由于实时参照不匹配,可能会出现空行。Values和DISTINCT函数的行数会有所不同。具体来说,Values会检测到空行并计入总行数,而DISTINCT则会去除重复项并计算行数。

当遇到实时参照不匹配且不希望显示空行时,我们可以使用DISTINCT函数处理列数据。ALL函数在今后的课程中还将多次出现,虽然功能是全选表,但需注意其与Values在处理空行时的差异。

为了解决空行问题,我们可以借鉴《火力全开》笔记中的ALLNOANKROW函数。此函数可有效处理空行,确保数据的准确性。

关于ALL(列)与ALLNOANKROW(列)、Values(列)与DISTINCT(列)的对比,前者主要区别在于是否检测空行,而后者则是在处理重复项时的差异。在写度量值时,我们需根据实际需求选择合适的函数。

提及一个插曲,2020年10月7日是我的20岁生日,那天晚上收到了某位讲师的留言,对我进行了质疑。但当我查看他所讲的内容时,发现他过于《The Definitive Guide to DAX》一书。在实际工作中,遵循数据库的实时参照完整性是至关重要的。对于新手小白,我们需要强调基础知识的重要性,避免走入误区。

不是所有话题都适合争论。我曾经在知乎上给某些讲师分享过一个逻辑问题:假设有人原地起飞飞出地球之外,我们是否认为这算作逃跑?这个问题体现了逻辑思维的重要性,即不应盲目相信任何说法,而应通过事实和逻辑来评判。

一书中提到的对表去重但不考虑空行的解释是准确的。在使用Values函数时,我们需注意其在处理一端表和多端表时的差异,尤其是空行问题的处理。

关于一端表的特点,主键的非空和不重复性是关键。当我们使用DISTINCT函数时,它主要应用于多端表。那么,使用DISTINCT(一端表)与直接使用一端表有何区别呢?显然,没有重复项的一端表无需去重。在讨论实时参照不匹配时,我们主要关注一端表与多端表的交互。

喜欢英语和喜欢数学的人在思维方式上有所不同。拥有逻辑思维的人会独立思考、测试并依据事实说话。在数据处理中遇到空行问题时,我们会选择合适的函数进行处理,如ALLNOANKROW函数。

关于指定多列去重的问题,我们将留待后续课程讲解。目前这两个函数仅支持单个参数,不支持指定多列去重。