当前位置: 首页 > wzjs >正文

建一个小型购物网站要有服务器百度网盘手机app下载安装

建一个小型购物网站要有服务器,百度网盘手机app下载安装,别墅室内设计网站,局域网建网站的详细步骤题目理解 SQL128 未完成试卷数大于1的有效用户 我们需要统计2021年每个未完成试卷作答数大于1的有效用户的数据。有效用户的定义是: 完成(提交了,有分数)试卷作答数至少为1未完成(未提交,没有分数&#…

题目理解

SQL128 未完成试卷数大于1的有效用户

我们需要统计2021年每个未完成试卷作答数大于1的有效用户的数据。有效用户的定义是:

  1. 完成(提交了,有分数)试卷作答数至少为1
  2. 未完成(未提交,没有分数)试卷作答数小于5

输出结果需要包含:

  • 用户ID(uid)
  • 未完成试卷作答数(incomplete_cnt)
  • 完成试卷作答数(complete_cnt)
  • 作答过的试卷tag集合(detail),格式为{日期:tag},用分号连接

解题思路

  1. 筛选2021年的数据​:只考虑2021年的作答记录
  2. 关联试卷信息​:通过exam_id关联exam_record和examination_info表
  3. 区分完成和未完成​:根据submit_time是否为NULL判断是否完成
  4. 计算统计指标​:
    • 未完成数:submit_time为NULL的记录数
    • 完成数:submit_time不为NULL的记录数
  5. 过滤有效用户​:
    • 未完成数 > 1
    • 未完成数 < 5
    • 完成数 ≥ 1
  6. 格式化输出​:将日期和tag组合成要求的格式

SQL解析

WITH user_exam_records AS (SELECTuid,exam_id,tag,DATE(start_time) AS start_time,DATE(submit_time) AS submit_timeFROMexam_recordJOIN examination_info USING (exam_id)WHEREstart_time >= '2021-01-01'AND start_time <= '2021-12-31'
)
SELECTuid,SUM(IF(submit_time IS NULL, 1, 0)) AS incomplete_cnt,SUM(IF(submit_time IS NULL, 0, 1)) AS complete_cnt,GROUP_CONCAT(DISTINCT CONCAT_WS(':', start_time, tag) SEPARATOR ';') AS detail
FROMuser_exam_records
GROUP BYuid
HAVINGincomplete_cnt > 1AND incomplete_cnt < 5AND complete_cnt >= 1
ORDER BYincomplete_cnt DESC

关键点说明

  1. 临时表user_exam_records​:

    • 筛选2021年的数据
    • 关联试卷信息表获取tag
    • 提取start_time和submit_time的日期部分
  2. 统计计算​:

    • SUM(IF(submit_time IS NULL, 1, 0))计算未完成数
    • SUM(IF(submit_time IS NULL, 0, 1))计算完成数
  3. detail格式化​:

    • 使用CONCAT_WS将日期和tag用冒号连接
    • 使用GROUP_CONCAT将所有记录用分号连接
    • DISTINCT确保不重复
  4. HAVING条件​:

    • incomplete_cnt > 1:未完成数大于1
    • incomplete_cnt < 5:未完成数小于5
    • complete_cnt >= 1:至少完成1份试卷

知识点扩展

1. CONCAT_WS函数

基本概念

CONCAT_WS是"Concatenate With Separator"的缩写,是SQL中用于连接字符串的函数,与普通CONCAT函数不同,它可以在各个字符串之间自动添加指定的分隔符

语法

CONCAT_WS(separator, string1, string2, ..., stringN)

参数说明

  • separator:必需,用作分隔符的字符串
  • string1, string2, ..., stringN:要连接的字符串,可以有多个

特点

  1. 自动添加分隔符​:只在字符串之间添加,不会在开头或结尾添加
  2. 跳过NULL值​:如果某个字符串为NULL,会自动跳过,不会在结果中留下多余的分隔符
  3. 分隔符可以是任意字符串​:不仅限于单个字符

示例

SELECT CONCAT_WS('-', '2023', '01', '15');  -- 结果: '2023-01-15'
SELECT CONCAT_WS(':', '姓名', NULL, '张三'); -- 结果: '姓名:张三'
SELECT CONCAT_WS(', ', '苹果', '香蕉', '橙子'); -- 结果: '苹果, 香蕉, 橙子'

与CONCAT的区别

SELECT CONCAT('2023', '-', '01', '-', '15');  -- 需要手动添加分隔符
SELECT CONCAT('姓名', ':', NULL, ':', '张三'); -- 结果: NULL(遇到NULL会返回NULL)

2. GROUP_CONCAT函数

基本概念

GROUP_CONCAT是MySQL中用于将分组后的多行数据合并为一个字符串的聚合函数,常用于需要将分组结果展示为逗号分隔列表的场景。

语法

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

参数说明

  • DISTINCT:可选,去除重复值
  • expr:要连接的表达式或列名
  • ORDER BY:可选,指定连接结果的排序方式
  • SEPARATOR:可选,指定分隔符,默认为逗号(,)

特点

  1. 分组连接​:通常与GROUP BY子句一起使用
  2. 灵活排序​:可以指定连接结果的排序方式
  3. 自定义分隔符​:可以设置任意分隔符
  4. 长度限制​:受group_concat_max_len系统变量限制,默认1024字节

示例

-- 基本用法
SELECT dept_id, GROUP_CONCAT(employee_name) 
FROM employees 
GROUP BY dept_id;-- 使用DISTINCT和自定义分隔符
SELECT dept_id, GROUP_CONCAT(DISTINCT employee_name SEPARATOR '|') 
FROM employees 
GROUP BY dept_id;-- 带排序
SELECT product_id, GROUP_CONCAT(customer_name ORDER BY purchase_date DESC SEPARATOR '; ') 
FROM purchases 
GROUP BY product_id;-- 多列连接
SELECT order_id, GROUP_CONCAT(CONCAT_WS(':', product_name, quantity)) 
FROM order_items 
GROUP BY order_id;

注意事项

  1. 如果结果可能很长,需要调整group_concat_max_len的值:
    SET SESSION group_concat_max_len = 1000000;
  2. 在Oracle中类似功能是LISTAGG函数,SQL Server中是STRING_AGG函数

3. 实际应用场景

  1. 标签系统​:将用户的多个标签合并为一个字段

    SELECT user_id, GROUP_CONCAT(tag_name SEPARATOR ', ') 
    FROM user_tags 
    GROUP BY user_id;
  2. 订单商品列表​:显示订单中包含的所有商品

    SELECT order_id, GROUP_CONCAT(product_name ORDER BY product_id SEPARATOR '\n') 
    FROM order_details 
    GROUP BY order_id;
  3. 日期和事件合并显示​:

    SELECT DATE(event_time) AS event_date,GROUP_CONCAT(event_description SEPARATOR '; ') 
    FROM events 
    GROUP BY DATE(event_time);
http://www.dtcms.com/wzjs/54932.html

相关文章:

  • 江阴做网站公司seo的培训课程
  • 做动态网站比较好用的网站精准数据营销方案
  • 网站建设方案硬件支撑网站的营销推广
  • 作业代做网站信息流投放平台
  • 什么网站可以做微官网啥是网络推广
  • 胜芳网站建设qiansi谷歌账号
  • 做电影网站需要哪些条件windows优化大师自动安装
  • 北京做网站推广的公司代运营一家店铺多少钱
  • 事业单位可以建设网站吗今日nba比赛直播
  • 专业的网站建设专业平台seo外链优化策略
  • 大学网站设计互联网营销方式有哪些
  • 北镇网站建设seo排名优化推广报价
  • 广西 网站开发企点
  • 医药网站建设方案外包服务公司
  • 企业做网站费用友情链接怎么添加
  • 淘宝网站怎么做的好坏怎样做电商 入手
  • 门户网站用虚拟主机关键词挖掘工具爱站网
  • 襄樊网站制作公司百度站长提交网址
  • 怎样给自己的店子做网站推广软文范例
  • 图标的网站一句话让客户主动找你
  • 消费返利系统网站建设域名备案官网
  • 用dw制作网站模板下载地址网络公司网络营销推广方案
  • 国内顶尖网站设计公司最新新闻事件今天
  • 淘宝客优惠券网站建设教程视频电商网站建设步骤
  • 企业的网站建设费用seo优化工具有哪些
  • 神农架网站制作建设网官方网站
  • phpnow 搭建网站下载百度app
  • 电子商务企业网站建设规划方案推广教程
  • 石家庄做网站设计上海百度seo牛巨微
  • 网站的做代理商学计算机哪个培训机构好