GVKun编程网logo

Sql聚合函数获取列表(sql聚合函数查询)

2

在本文中,我们将带你了解Sql聚合函数获取列表在这篇文章中,我们将为您详细介绍Sql聚合函数获取列表的方方面面,并解答sql聚合函数查询常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的MyS

在本文中,我们将带你了解Sql聚合函数获取列表在这篇文章中,我们将为您详细介绍Sql聚合函数获取列表的方方面面,并解答sql聚合函数查询常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的MySQL 聚合函数 控制流程函数、MySQL 聚合函数(一)聚合(组合)函数概述、Mysql,order by 后跟 别名 表达式 均可,Mysql可以用聚合函数的别名排序,也可以用聚合函数的表达式排序、MYSQL-------聚合函数

本文目录一览:

Sql聚合函数获取列表(sql聚合函数查询)

Sql聚合函数获取列表(sql聚合函数查询)

喜!

如何创建聚合函数以获取聚合值列表.

给出:

key     value
Andrei  1
Andrei  2
Andrei  3
Mihai   4
Mihai   5
Mihai   6

我想要

key list
Andrei 1,2,3
Mihai 4,5,6

解决方法

我曾经用过这篇文章就完全一样了:

http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

MySQL 聚合函数 控制流程函数

MySQL 聚合函数 控制流程函数

常用的聚合函数

1. AVG() 求平均值

mysql> AVG([DISTINCT] expr)  -- 返回 expr 的平均值
mysql> select AVG(age) from table_teacher;

2. COUNT()  统计 select 语句检索到的行的数目

mysql> select COUNT(*) from table_teacher;  -- 返回检索行的数目,不论其是否包含NULL
mysql> select COUNT(name) from tab_teacher;  -- 返回select语句检索到的行中非NULL的数目

3. MAX()  返回最大值

mysql> select MAX(age) from tab_teacher  -- 返回最大的age

4. MIN()  返回最小值

mysql> select MIN(age) from tab_teacher  -- 返回最小的age

5. SUM()  求和

mysql> select SUM(age) from tab_teacher  -- 对age进行求和

控制流程函数

 常用的流程控制语句有:

CASE .. WHEN .. THEN ... ELSE ... END

CASE value WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE result3 END
-- 用 value 值来做匹配,如果value1和value匹配,则返回result1,如果value2和value匹配,则返回result2,否则返回ELSE后面的result3,如果没有ELSE部分的值,则返回NULL。
-- 类似于Java当中的switch...case..default...语句

IF

IF(expr1, expr2, expr3)
-- 如果expr1是true,返回expr2,否则返回expr3
-- 类似于三目运算符

IFNULL

IFNULL(expr1, expr2)
-- 如果expr1为NULL,返回expr2;否则返回expr1

NULLIF

NULLIF(expr1, expr2)
-- 如果expr1=expr2成立,那么返回NULL,否则返回expr1

 

MySQL 聚合函数(一)聚合(组合)函数概述

MySQL 聚合函数(一)聚合(组合)函数概述

  MySQL 版本:5.7+

  本节介绍对值的集合进行操作的组合(聚合)函数。翻译自:Aggregate (GROUP BY) Function Descriptions

一、MySQL 5.7 中的聚合函数

  MySQL 5.7 中的聚合函数如下:

  除非另有说明,否则组合函数会忽略 NULL 值。

  如果在不包含 Group By 子句的语句中使用组合函数,就等效于对所有行进行分组。(个人理解是,结果总是只有一行。)关于这点的更多信息,后面的小节 “MySQL 处理 Group By 的方式” 会讲到。

  聚合函数中,方差和标准差函数会对数值参数返回 DOUBLE 值。SUM () 和 AVG () 对精确值参数(integer 或 DECIMAL)返回 DECIMAL 值,而对近似值参数(FLOAT 或 DOUBLE)返回 DOUBLE 值。

  时间类型的参数对 SUM () 和 AVG () 无效。它们会把时间类型的值转换成数字,丢弃第一个非数字字符后的所有信息)。如果要解决这个问题,先要将时间类型的值转换为合适的数值单元,在执行聚合操作后,再转换回时间值。如下所示:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;

  诸如 SUM () 和 AVG () 这样需要数值参数的函数,会对非数值参数做必要的强制转换。而对于 SET 或 ENUM 值,强制转换操作会导致使用基础数值。

  BIT_AND (),BIT_OR () 和 BIT_XOR () 聚合函数执行位操作。它们需要 BIGINT(64 位整数)参数并返回 BIGINT 值。其他类型的参数将转换为 BIGINT 并可能发生截断。而在 MySQL 8.0 中,允许位操作采用二进制字符串类型参数(BINARY,VARBINARY 和 BLOB 类型),详见其手册的 12.12 节。

 

二、聚合函数详解

  2.1 AVG()

AVG([DISTINCT] expr)

  函数返回 expr 的平均值。

  DISTINCT 则用于返回 expr 的不同值的平均值。

  如果没有匹配的行,AVG () 返回 null。

 

  2.2 COUNT()

COUNT(expr)

  返回 SELECT 语句检索的行中 expr 的非 NULL 值的计数。

  返回结果是 BIGINT 值。

  如果没有匹配的行,count () 返回 0.

  

  count (*) 有些不同,它返回取回的行的行数的计数,无论它们是否包含 NULL 值。

  对于诸如 InnoDB 之类的事务存储引擎,存储精确的行数是有问题的。多个事务可能同时发生,每个事务都可能影响计数。

  所以 InnoDB 不在内部保留表的行数,因为并发事务可能同时 “看到” 不同数量的行。因此,SELECT COUNT (*) 语句只计算当前事务可见的行。

  在 MySQL 5.7.18 之前,InnoDB 通过扫描聚集索引(clustered index)来处理 SELECT COUNT (*) 语句。从 MySQL 5.7.18 开始,InnoDB 通过遍历最小的可用二级索引来处理 SELECT COUNT (*) 语句,除非索引或优化器提示指示优化器使用不同的索引。如果不存在辅助索引,则扫描聚集索引。

  如果索引记录不完全在缓冲池中,那么处理 select count (*) 语句需要一些时间。为了更快地计算,可以创建一个计数表,让应用程序根据插入和删除操作更新它。但是,在数千个并发事务正在启动对同一计数器表的更新的情况下,此方法可能无法很好地扩展。因此,如果大概的行数可以满足需求,请使用 SHOW TABLE STATUS。

  对于 MyISAM 表,如果 SELECT 从一个表没有检索到其他列,并且没有 WHERE 子句,而只返回 COUNT (*) 的结果,则 COUNT (*) 会被优化,可以快速返回。例如:

SELECT COUNT(*) FROM student;

  此优化仅适用于 MyISAM 表,因为为此存储引擎存储了精确的行数,并且可以非常快速地访问。COUNT (1) 则仅在第一列定义为 NULL 时,受到相同额度优化。

 

  2.3 COUNT(DISTINCT ...)

COUNT(DISTINCT expr,[expr...])

  函数返回返回不相同且非 NULL 的 expr 值的行数。

  如果没有匹配的行,则 COUNT (DISTINCT) 返回 0。

  在 MySQL 中,您可以通过提供表达式列表,来获取不包含 NULL 的不同表达式组合的数量。而在标准表达式中,必须在 COUNT (DISTINCT ...) 中对所有表达式进行连接。

 

  2.4 GROUP_CONCAT()

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

  这个函数把来自同一个组的某一列(或者多列)的数据连接起来成为一个字符串。

  如果没有非 NULL 值,返回 NULL。

  示例如下:

/*001*/
/*成绩表中只对学生ID分组*/
select SId, group_concat(cId),group_concat(score) from sc group by SId;

  结果如下,并没有排序

/*002*/
/*排序后连接,改变分隔符*/
select SId, group_concat(cId),group_concat(score order by score desc separator ''  '') 
from sc group by SId;

  结果如下:

  至于对多个 expr 的连接,试了试,会把两个字段无缝连在一起。

select SId, group_concat(cId,score),group_concat(score) from sc group by SId;

 

  Group_Concat () 的结果将截断为 group_concat_max_len 系统变量所设置的最大长度,该变量的默认值为 1024。

  而返回值是非二进制或二进制字符串,具体取决于参数是非二进制还是二进制字符串。

  返回的结果类型为 TEXT 或 BLOB,除非 group_concat_max_len 小于或等于 512,这种情况下,结果类型为 VARCHAR 或 VARBINARY。

 

  2.5 JSON_ARRAYAGG(col or expr)

  将结果集聚合为单个 JSON 数组,其元素由参数列的值组成。此数组中元素的顺序未定义。该函数作用于计算为单个值的列或表达式。

  异常返回 NULL。

  示例如下:

 

  2.6 JSON_OBJECTAGG(key,value)

  两个列名或表达式作为参数,第一个用作键,第二个用作值,并返回包含键值对的 JSON 对象。

  如果结果不包含任何行,或者出现错误,则返回 NULL。如果任何键名称为 NULL 或参数数量不等于 2,则会发生错误。

 

  如何处理重复 key,参考原文此处。

 

  2.7 其余函数

  位函数进行位操作。

  标准差和方差函数,为了兼容有不同的函数名。

  详见原文档。

 

 

 

  

Mysql,order by 后跟 别名 表达式 均可,Mysql可以用聚合函数的别名排序,也可以用聚合函数的表达式排序

Mysql,order by 后跟 别名 表达式 均可,Mysql可以用聚合函数的别名排序,也可以用聚合函数的表达式排序

select id2,sum(num1) from table1
  • where id1 = '123'
  • group by id2
  • order by sum(num1)
  • select id2,sum(num1) as sum_num1 from table1
  • where id1 = '123'
  • group by id2
  • order by sum_num1
  • select id2,sum(num1) sum_num1 from table1
  • where id1 = '123'
  • group by id2
  • order by sum_num1
  • 以上这三条查询语句的结果一样,

    order by 某个聚合函数结果时,可以直接 order by 别名 ,这样更方便

    hive order by 聚合函数 别名

    Mysql可以用聚合函数的别名排序,也可以用聚合函数的表达式排序,

    HIve只能用聚合函数的别名排序,不可以用聚合函数的表达式排序,

    MYSQL-------聚合函数

    MYSQL-------聚合函数

    #聚合函数
    sum()  avg()   max()   min()   count()
    统计的是所有元组对应的属性,输出一行数据
    
    /*可以搭配其他函数使用
    比如:保留平均值小数点后两位:ROUND(AVG(),2)
    */
    
    --参数的类型
      SUM()、AVG()一般处理数值型
      MAX()、MIN()处理数值,字符,和日期型
      COUNT()则是统计非空列名,如果*则是统计所有元组数量(包含NULL)
      
      
    --是否忽略NULL值  
      以上函数都忽略NULL值
     
     
    --可以和distinct搭配使用
     SELECT SUM(DISTINCT salary) from employees;
     
     
     
    --count()函数详细
      1.SELECT COUNT(列名) FROM employees;(NULL不统计)
      2.SELECT COUNT(*) FROM employees;(NULL会统计)
      3.SELECT COUNT(1) FROM employees;(与第二相似,一般采用第二种方式)
      

     

    关于Sql聚合函数获取列表sql聚合函数查询的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于MySQL 聚合函数 控制流程函数、MySQL 聚合函数(一)聚合(组合)函数概述、Mysql,order by 后跟 别名 表达式 均可,Mysql可以用聚合函数的别名排序,也可以用聚合函数的表达式排序、MYSQL-------聚合函数的相关知识,请在本站寻找。

    本文标签: