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

mfy学习笔记

创建表并导入数据

CREATE TABLE sales (
    id INT,
    salesperson STRING,
    region STRING,
    sales_amount INT,
    sale_date DATE
);

INSERT INTO sales (id, salesperson, region, sales_amount, sale_date)
VALUES
(1, 'Alice', 'North', 1000, '2023-01-01'),
(2, 'Bob', 'South', 1500, '2023-01-02'),
(3, 'Alice', 'North', 2000, '2023-01-03'),
(4, 'Charlie', 'East', 1200, '2023-01-04'),
(5, 'Bob', 'South', 1800, '2023-01-05'),
(6, 'Alice', 'North', 2500, '2023-01-06'),
(7, 'Charlie', 'East', 1300, '2023-01-07'),
(8, 'Bob', 'South', 2200, '2023-01-08'),
(9, 'Alice', 'North', 3000, '2023-01-09'),
(10, 'Charlie', 'East', 1400, '2023-01-10');

示例数据表:sales

idsalespersonregionsales_amountsale_date
1AliceNorth10002023-01-01
2BobSouth15002023-01-02
3AliceNorth20002023-01-03
4CharlieEast12002023-01-04
5BobSouth18002023-01-05
6AliceNorth25002023-01-06
7CharlieEast13002023-01-07
8BobSouth22002023-01-08
9AliceNorth30002023-01-09
10CharlieEast14002023-01-10
---

### 1. `CASE WHEN` 示例
根据销售额给销售人员分类:

```sql
SELECT 
    salesperson,
    sales_amount,
    CASE 
        WHEN sales_amount < 1500 THEN 'Low'
        WHEN sales_amount BETWEEN 1500 AND 2500 THEN 'Medium'
        ELSE 'High'
    END AS sales_category
FROM 
    sales;
运行结果:
salespersonsales_amountsales_category
Alice1000Low
Bob1500Medium
Alice2000Medium
Charlie1200Low
Bob1800Medium
Alice2500Medium
Charlie1300Low
Bob2200Medium
Alice3000High
Charlie1400Low

2. SUM(CASE WHEN) 示例

计算每个区域的销售总额:

SELECT 
    region,
    SUM(CASE WHEN salesperson = 'Alice' THEN sales_amount ELSE 0 END) AS alice_sales,
    SUM(CASE WHEN salesperson = 'Bob' THEN sales_amount ELSE 0 END) AS bob_sales,
    SUM(CASE WHEN salesperson = 'Charlie' THEN sales_amount ELSE 0 END) AS charlie_sales
FROM 
    sales
GROUP BY 
    region;
运行结果:
regionalice_salesbob_salescharlie_sales
North850000
South055000
East003900

3. RANK() 示例

根据销售额对销售人员进行排名:

SELECT 
    salesperson,
    sales_amount,
    RANK() OVER (ORDER BY sales_amount DESC) AS sales_rank
FROM 
    sales;
运行结果:
salespersonsales_amountsales_rank
Alice30001
Bob22002
Alice25003
Bob18004
Alice20005
Bob15006
Charlie14007
Charlie13008
Alice10009
Charlie120010

4. ROW_NUMBER() 示例

为每个销售人员的销售额分配一个唯一的行号:

SELECT 
    salesperson,
    sales_amount,
    ROW_NUMBER() OVER (PARTITION BY salesperson ORDER BY sales_amount DESC) AS row_num
FROM 
    sales;
运行结果:
salespersonsales_amountrow_num
Alice30001
Alice25002
Alice20003
Alice10004
Bob22001
Bob18002
Bob15003
Charlie14001
Charlie13002
Charlie12003

5. DENSE_RANK() 示例

根据销售额对销售人员进行密集排名(不会跳过排名):

SELECT 
    salesperson,
    sales_amount,
    DENSE_RANK() OVER (ORDER BY sales_amount DESC) AS dense_rank
FROM 
    sales;
运行结果:
salespersonsales_amountdense_rank
Alice30001
Bob22002
Alice25003
Bob18004
Alice20005
Bob15006
Charlie14007
Charlie13008
Alice10009
Charlie120010

总结

  • CASE WHEN:用于条件判断,生成新的列。
  • SUM(CASE WHEN):用于按条件汇总数据。
  • RANK():用于排名,允许并列排名并跳过后续名次。
  • ROW_NUMBER():用于生成唯一的行号,即使数据相同也会分配不同行号。
  • DENSE_RANK():用于密集排名,允许并列排名但不跳过后续名次。

通过这些示例和运行结果,可以清晰地展示每个函数的作用和用法!

相关文章:

  • C# 数据类型
  • C#异步编程之async与await
  • sklearn机器学习 Python代码通用模板
  • 【vue3+highCharts】图表及字体大小自适应
  • 道路三维数字化技术产品方案介绍(软硬件一体,适用于各等级公路)
  • Linux文本编译器
  • 供应链管理系统--升鲜宝门店收银系统功能解析,登录、主界面、会员 UI 设计图(一)
  • 结构型模式 - 享元模式 (Flyweight Pattern)
  • DeepSeek开源周第二弹:DeepEP如何用RDMA+FP8让MoE模型飞起来?
  • Ollama Open WebUI
  • PwnLab详细解答
  • 解决Deepseek“服务器繁忙,请稍后再试”问题,基于硅基流动和chatbox的解决方案
  • c#-LINQ与lambda表达式学习笔记
  • DeepSeek R1 + 飞书机器人实现AI智能助手
  • MinIO整合SpringBoot实现文件上传、下载
  • MySQL八股整理
  • Unity Dedicated Server 控制台 输出日志LOg 中文 乱码
  • docker的下载与使用(一)
  • 【Godot4.3】基于绘图函数的矢量蒙版效果与UV换算
  • 在Anaconda的虚拟环境中安装R,并在vscode中使用
  • 电信改公网ip可以做网站吗/qq群引流推广平台免费
  • 网站标题字符/seo外链工具源码
  • 政府网站建设 报价/推广发帖网站
  • 一个域名一个ip做多个网站/百度sem推广具体做什么
  • 镇江网站建设找思创/5118站长工具
  • 淘宝客优惠券网站建设加盟官网/南通百度网站快速优化