数据库
首页 > 数据库> > [SparkSQL][COUNT(*COLS)]关于count(col1,col2)的使用记录

[SparkSQL][COUNT(*COLS)]关于count(col1,col2)的使用记录

作者:互联网

结论

功能

count(col1, col2) 可以统计 多个字段的非空记录

要求

  1. count()内含多个字段时,若有一个字段的记录为Null 则该条记录不会被统计
  2. count()内含多个字段时,非sparksql引擎需要加distinct 字段限制
  3. count()内含多个字段时,和以下语句不同
    select count(*)
    from (
    select distinct col1, col2
    from table1
    ) a
    distinct 子查询时,对于null数据,还是会有所保留,count(*)统计的是数据行数
    count(col1,col2)统计记录时,count(null)=0,带有null数据时,记录不算
+---+-----+-----+
| id| name|score|
+---+-----+-----+
|  1|alice|   90|
|  2| null|   85|
|  3|alice|   95|
|  4|  Bob|  100|
|  5|alice|   95|
+---+-----+-----+
>>> spark.sql("""
    select count(distinct name,score)
    from table1
    """).show()
+---------------------------+
|count(DISTINCT name, score)|
+---------------------------+
|                          3|
+---------------------------+

>>> spark.sql("""
    select count(name,score)
    from table1
    """).show()

+------------------+
|count(name, score)|
+------------------+
|                 3|
+------------------+
>>> spark.sql("""
    select count(*)
    from(
        select distinct name, score
        from table1
    ) a
    """).show()
+--------+
|count(1)|
+--------+
|       4|
+--------+

标签:COUNT,count,name,distinct,col2,字段,score,select
来源: https://www.cnblogs.com/riaris/p/15720732.html