我遇到以下问题的一部分。预先感谢您的帮助。我很难想象这个“假”数据库表。我希望有人可以帮助我理解我的逻辑,看看是否正确。如果有人可以将我指向正确的方向,那就太好了!
芝麻是查找成人在线课程和周围成人活动的一种方式。
想象一下一个名为activities
的数据库表。它有四列:
activity_id [int,非空]
activity_provider_id [int,非空]
area_id [int,可为空]
starts_at [时间戳,非null]
问题:给定以下查询,您希望返回最高和最低值的计数是多少?您希望哪个数字相同?为什么?
select
count(activity_id),
count(distinct activity_provider_id),
count(area_id),
count(distinct area_id),
count(*)
from activities
我的解决方案
最高值:count(*)
理由:Count(*)函数返回SELECT语句返回的行数,包括NULL和重复项。
最低值:count(distinct activity_provider_id)
原因:每个区域每个活动的活动提供者较少*
相同:不确定-有人能指出我正确的方向吗?
答案 0 :(得分:1)
count(*)
考虑了表中的所有行,而count(some_col)
仅计算了some_col
的非空值。
由于activity_id
是一个不可为空的列,因此可以期望以下表达式返回相同的“最高”计数:
count(activity_id)
count(*)
至于至极表达式在其余三个选择中返回的最低计数,实际上不可能从问题中提供的信息中确定。是否实际取决于与活动提供者相比,是更多还是更少?
如果表中所有活动提供者(resp。区域)都不为空且唯一,那么甚至有一种极端情况,其中所有表达式返回相同的情况。