COUNT功能:查询结果

时间:2020-07-27 20:27:38

标签: sql postgresql group-by count

我遇到以下问题的一部分。预先感谢您的帮助。我很难想象这个“假”数据库表。我希望有人可以帮助我理解我的逻辑,看看是否正确。如果有人可以将我指向正确的方向,那就太好了!

关于:

芝麻是查找成人在线课程和周围成人活动的一种方式。

想象一下一个名为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)

原因:每个区域每个活动的活动提供者较少*

相同:不确定-有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

count(*)考虑了表中的所有行,而count(some_col)仅计算了some_col的非空值。

由于activity_id是一个不可为空的列,因此可以期望以下表达式返回相同的“最高”计数:

count(activity_id)
count(*)

至于至极表达式在其余三个选择中返回的最低计数,实际上不可能从问题中提供的信息中确定。是否实际取决于与活动提供者相比,是更多还是更少?

如果表中所有活动提供者(resp。区域)都不为空且唯一,那么甚至有一种极端情况,其中所有表达式返回相同的情况。