Oracle数据库中常用的统计分析方法,包括多表连接、分组聚合、窗口函数、日期处理等多种技术

1. 多表连接统计分析

SELECT 
    d.department_name,
    COUNT(e.employee_id) AS employee_count,
    AVG(e.salary) AS avg_salary,
    MAX(e.salary) AS max_salary,
    MIN(e.salary) AS min_salary
FROM 
    employees e
JOIN 
    departments d ON e.department_id = d.department_id
GROUP BY 
    d.department_name
ORDER BY 
    employee_count DESC;

此查询统计了各部门的员工数量、平均薪资、最高薪资和最低薪资,通过连接employees和departments表并按部门分组。

2. 时间相关的销售数据分析

SELECT 
    TO_CHAR(o.order_date, 'YYYY-MM') AS month,
    c.customer_name,
    SUM(oi.quantity * oi.unit_price) AS total_sales,
    RANK() OVER (PARTITION BY TO_CHAR(o.order_date, 'YYYY-MM') 
    ORDER BY SUM(oi.quantity * oi.unit_price) DESC) AS sales_rank
FROM 
    orders o
JOIN 
    order_items oi ON o.order_id = oi.order_id
JOIN 
    customers c ON o.customer_id = c.customer_id
WHERE 
    o.order_date BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') 
    AND TO_DATE('2024-12-31', 'YYYY-MM-DD')
GROUP BY 
    TO_CHAR(o.order_date, 'YYYY-MM'), c.customer_name
HAVING 
    SUM(oi.quantity * oi.unit_price) > 10000
ORDER BY 
    month, sales_rank;

此分析展示了2024年每月销售额最高的客户,使用了多表连接、日期函数、窗口函数和分组过滤。

3. 产品性能随时间变化趋势

WITH monthly_sales AS (
    SELECT 
        p.product_name,
        TO_CHAR(o.order_date, 'YYYY-MM') AS month,
        SUM(oi.quantity) AS total_quantity,
        SUM(oi.quantity * oi.unit_price) AS total_revenue
    FROM 
        products p
    JOIN 
        order_items oi ON p.product_id = oi.product_id
    JOIN 
        orders o ON oi.order_id = o.order_id
    WHERE 
        o.order_date BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'YEAR'), -12) 
        AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1))
    GROUP BY 
        p.product_name, TO_CHAR(o.order_date, 'YYYY-MM')
)
SELECT 
    product_name,
    month,
    total_quantity,
    total_revenue,
    LAG(total_quantity, 1, 0) OVER (PARTITION BY product_name ORDER BY month) AS prev_month_quantity,
    ROUND((total_quantity - LAG(total_quantity, 1, 0) OVER (PARTITION BY product_name ORDER BY month)) /  NULLIF(LAG(total_quantity, 1, 1) OVER (PARTITION BY product_name ORDER BY month), 0) * 100, 2) AS quantity_growth_pct
FROM 
    monthly_sales
ORDER BY 
    product_name, month;

此查询分析了过去12个月各产品的销售数量和收入变化趋势,并计算了环比增长率。

4. 员工绩效综合统计

SELECT 
    e.employee_id,
    e.first_name || ' ' || e.last_name AS employee_name,
    d.department_name,
    j.job_title,
    COUNT(DISTINCT o.order_id) AS orders_processed,
    NVL(SUM(oi.quantity * oi.unit_price), 0) AS total_sales_amount,
    ROUND(NVL(SUM(oi.quantity * oi.unit_price), 0) / 
          NULLIF(COUNT(DISTINCT o.order_id), 0), 2) AS avg_order_value,
    RANK() OVER (PARTITION BY d.department_id ORDER BY NVL(SUM(oi.quantity * oi.unit_price), 0) DESC) AS dept_sales_rank
FROM 
    employees e
LEFT JOIN 
    orders o ON e.employee_id = o.sales_rep_id
LEFT JOIN 
    order_items oi ON o.order_id = oi.order_id
JOIN 
    departments d ON e.department_id = d.department_id
JOIN 
    jobs j ON e.job_id = j.job_id
WHERE 
    o.order_date BETWEEN ADD_MONTHS(SYSDATE, -6) AND SYSDATE
    OR o.order_id IS NULL
GROUP BY 
    e.employee_id, e.first_name, e.last_name, d.department_name, j.job_title, d.department_id
ORDER BY 
    total_sales_amount DESC NULLS LAST;

5. 数据库对象空间使用统计

SELECT 
    t.owner AS schema_name,
    t.table_name,
    t.num_rows,
    ROUND(s.bytes/1024/1024, 2) AS size_mb,
    TO_CHAR(t.last_analyzed, 'YYYY-MM-DD HH24:MI:SS') AS last_analyzed,
    COUNT(c.column_id) AS column_count,
    SUM(CASE WHEN c.nullable = 'Y' THEN 1 ELSE 0 END) AS nullable_columns,
    SUM(CASE WHEN c.data_type IN ('DATE', 'TIMESTAMP') THEN 1 ELSE 0 END) AS date_columns
FROM 
    all_tables t
JOIN 
    all_segments s ON t.owner = s.owner AND t.table_name = s.segment_name
LEFT JOIN 
    all_tab_columns c ON t.owner = c.owner AND t.table_name = c.table_name
WHERE 
    t.owner = USER
    AND t.last_analyzed > ADD_MONTHS(SYSDATE, -3)
GROUP BY 
    t.owner, t.table_name, t.num_rows, s.bytes, t.last_analyzed
ORDER BY 
    size_mb DESC;

此查询统计了当前用户模式下各表的空间使用情况、行数、列数等元数据信息,帮助进行数据库性能优化。

以上SQL示例涵盖了Oracle数据库中常用的统计分析方法,包括多表连接、分组聚合、窗口函数、日期处理等多种技术,可用于生成全面的数据库统计分析报告。

喜欢就关注我吧!以后给大家分享更多的学习内容

你可能感兴趣的:(数据库,数据库,oracle,数据分析,sql)