loading

SQL247 按照dept_no进行汇总

SQL247 按照dept_no进行汇总

按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees

CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));

输出格式:

dept_no	employees
d001	10001,10002
d002	10006
d003	10005
d004	10003,10004
d005	10007,10008,10010
d006	10009,10010

答案

select dept_no,GROUP_CONCAT(emp_no) from dept_emp group by dept_no;

补充

# 常见聚合函数
COUNT():计算行数。
COUNT(*):计算包括 NULL 在内的所有行数。
COUNT(column_name):计算指定列中非 NULL 值的数量。
SUM():计算数值列中值的总和。
SUM(column_name):计算指定数值列的总和。
AVG():计算数值列的平均值。
AVG(column_name):计算指定数值列的平均值。
MAX():找出某列的最大值。
MAX(column_name):找出指定列的最大值。
MIN():找出某列的最小值。
MIN(column_name):找出指定列的最小值。
GROUP_CONCAT():将来自多个记录的列值连接成一个字符串。
GROUP_CONCAT(column_name):将指定列的值连接成一个字符串,列值之间默认用逗号分隔。

窗口函数

MySQL 8.0 及更高版本引入了窗口函数,这些函数允许在结果集的每行上执行计算,这些计算基于一组行(称为窗口),而这些行是通过 OVER() 子句中的 PARTITION BY 指定。
在 OVER() 子句中,PARTITION BY 子句用于将结果集分成多个分区,然后窗口函数在每个分区内独立地执行计算。
这样,每个分区都可以有自己的聚合结果,但这些结果会与原始结果集的每一行相关联。

假设我们有一个名为 sales 的表,包含 salesperson_id, sale_date, 和 amount 字段,我们想要计算每个销售人员的总销售额以及他们每天的销售额占其总销售额的百分比。

sql
SELECT  
    salesperson_id,  
    sale_date,  
    amount,  
    SUM(amount) OVER(PARTITION BY salesperson_id) AS total_sales_per_salesperson,  
    ROUND(amount * 100.0 / SUM(amount) OVER(PARTITION BY salesperson_id), 2) AS percentage_of_total  
FROM  
    sales;
在这个查询中:

SUM(amount) OVER(PARTITION BY salesperson_id) 计算了每个销售人员的总销售额。PARTITION BY salesperson_id 确保了 SUM() 函数是在每个销售人员的销售额上独立计算的。
ROUND(amount * 100.0 / SUM(amount) OVER(PARTITION BY salesperson_id), 2) 计算了每天销售额占销售人员总销售额的百分比,并保留两位小数。
注意,虽然这些函数在功能上类似于聚合函数,但它们实际上是窗口函数,因为它们允许在结果集的每一行上执行计算,而不仅仅是整个分组或整个结果集。
posted @ 2024-07-22 21:51  EaApple  阅读(36)  评论(0)    收藏  举报