代码之家  ›  专栏  ›  技术社区  ›  David542

是否有允许DISTINCT*的聚合函数?

  •  1
  • David542  · 技术社区  · 2 年前

    某些功能允许 * 聚合函数中的符号,例如:

    SELECT COUNT(*) FROM sales
    

    其他功能允许 DISTINCT 函数调用中的修饰符,例如:

    SELECT COUNT(DISTINCT IF(x > 0, x, NULL)) FROM sales
    

    我的问题是,是否有任何函数允许表示:

    SELECT function(DISTINCT *)
    
    1 回复  |  直到 2 年前
        1
  •  0
  •   Bill Karwin    2 年前

    没有,除了的具体情况 COUNT() ,你不能使用 * 在函数参数中。

    • 一些内置函数(例如,CONCAT()或COALESCE())采用可变数量的参数,但在调用该函数时必须将它们拼写出来。

    • 在MySQL中,存储函数采用固定数量的参数。

    • 在PostgreSQL中,存储函数可以接受可变数量的参数,但在调用函数时仍必须指定这些参数。

    我查看了MySQL的解析器代码,发现了以下使用 '*' 象征

    • COUNT(*) COUNT(ALL *) COUNT(DISTINCT *)
    • SELECT * ... SELECT ident.* ...
    • DELETE * ...
    • INSERT INTO ident (ident.*) ...
    • SHOW COUNT(*) WARNINGS SHOW COUNT(*) ERRORS
    • GRANT ... ON * GRANT ... ON ident.* GRANT ... ON *.*
    • 算术乘法运算符