领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

Linux运维面试sql语句2 面试linux运维工程师提问哪些问题

nixiaole 2024-11-12 13:46:36 知识剖析 22 ℃

Linux运维面试中常考的笔试题,整理一下给大家分享一波,下面来看看面试题吧。

1.如何找出某个员工在过去一年中的平均月薪?(表格结构:员工ID,薪水,日期)

【答案】使用 GROUP BY 子句和 AVG 函数来统计每个员工的平均月薪。

SELECT 员工ID, AVG(薪水) AS 平均月薪
FROM 表名
WHERE 日期 >= DATEADD(year, -1, GETDATE())
GROUP BY 员工ID;

2.【题目】如何查询出行中多个字段相同时的数据?(表格结构:字段A,字段B,字段C)

【答案】使用 GROUP BY 子句和 HAVING 子句来查找字段 A、B、C 都相同的数据。

SELECT 字段A, 字段B, 字段C, COUNT(*) AS 计数
FROM 表名
GROUP BY 字段A, 字段B, 字段C
HAVING COUNT(*) > 1;

3.【题目】如何查询出一张表中最近一年中每个类别销售量排名前 5 的商品?(表格结构:商品ID,销售量,日期,类别)

【答案】使用子查询和 RANK() 函数来计算每个类别中每个商品的销售量排名,然后再使用 WHERE 子句筛选出最近一年的数据,最后使用 TOP 子句选择前 5 名。

SELECT *
FROM (
    SELECT 商品ID, 类别, 销售量, RANK() OVER (PARTITION BY 类别 ORDER BY 销售量 DESC) AS 排名
    FROM 表名
    WHERE 日期 >= DATEADD(year, -1, GETDATE())
    ) 子查询
WHERE 排名 <= 5;

4.【题目】如何查询出一张表中连续N个月销售额增长的产品?(表格结构:商品ID,销售额,日期)

【答案】使用 DATEADD 和 DATEDIFF 函数来计算连续 N 个月,并使用子查询和 LEAD 函数来计算每个产品在相邻两个月中的销售额差值。

WITH CTE AS (
    SELECT 商品ID, 销售额, 日期,
        DATEDIFF(month, MIN(日期) OVER(PARTITION BY 商品ID), 日期) + 1 AS 月份
    FROM 表名
)
SELECT *
FROM (
    SELECT 商品ID, 月份, SUM(销售额) OVER(PARTITION BY 商品ID, 分组 ORDER BY 月份 ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS 上个月销售额, 销售额,
        LEAD(销售额, 1) OVER(PARTITION BY 商品ID, 分组 ORDER BY 月份) - 销售额 AS 差值
    FROM (
        SELECT *, 月份 - ROW_NUMBER() OVER(PARTITION BY 商品ID ORDER BY 月份) AS 分组
        FROM CTE
        WHERE 月份 >= N
    ) t
) t2
WHERE 差值 > 0;

5.【题目】如何查询出一张表中的各个时间段内的销售总额和占比?(表格结构:销售ID,销售金额,日期)

【答案】使用 DATEPART 和 DATENAME 函数来计算各个时间段,使用 GROUP BY 子句和 SUM 函数来统计销售总额,并使用 SUM 函数的 OVER 子句来计算占比。

SELECT DATEPART(季度, 日期) AS 季度, SUM(销售金额) AS 销售总额,
    CAST(SUM(销售金额) AS FLOAT) / CAST(SUM(SUM(销售金额)) OVER() AS FLOAT) AS 占比
FROM 表名
GROUP BY DATEPART(季度, 日期);

6.【题目】如何查询出一张表中每个类别的前 3 名销售员和其销售金额?(表格结构:销售员,类别,销售金额)

【答案】使用 ROW_NUMBER() 函数和 PARTITION BY 子句来对每个类别下的销售员进行排序,并使用 WHERE 子句和 TOP 子句来选择前 3 名。

SELECT 销售员, 类别, 销售金额
FROM (
    SELECT 销售员, 类别, 销售金额, ROW_NUMBER() OVER(PARTITION BY 类别 ORDER BY 销售金额 DESC) AS 排名
    FROM 表名
) t
WHERE 排名 <= 3;

7.【题目】如何查询出某个表中最近的 N 条数据?(表格结构:ID,日期,内容)

【答案】使用 TOP 子句和 ORDER BY 子句来选择最近的 N 条数据。

SELECT TOP N ID, 日期, 内容
FROM 表名
ORDER BY 日期 DESC;

8.【题目】如何查询出某个时间段内新增的用户数量和总用户数量?(表格结构:用户ID,注册日期)

【答案】使用 DATEADD 和 DATEDIFF 函数来计算时间段,使用 COUNT 函数来统计新增用户数量,并使用 SUM 函数和 OVER 子句来计算总用户数量。

SELECT COUNT(*) AS 新增用户数, SUM(COUNT(*)) OVER(ORDER BY 注册日期) AS 总用户数
FROM 表名
WHERE 注册日期 >= 开始日期 AND 注册日期 <= 结束日期
GROUP BY DATEADD(day, DATEDIFF(day, 0, 注册日期), 0);

9.【题目】如何查询出某个时间段线上和线下销售额的占比?(表格结构:销售ID,销售金额,销售方式,日期)

【答案】使用 CASE WHEN 子句和 SUM 函数来统计线上和线下销售额,并使用 SUM 函数的 OVER 子句来计算总销售额,然后通过除法计算占比。

SELECT 销售方式, SUM(CASE WHEN 销售方式 = '线上' THEN 销售金额 ELSE 0 END) AS 线上销售额,
    SUM(CASE WHEN 销售方式 = '线下' THEN 销售金额 ELSE 0 END) AS 线下销售额,
    CAST(SUM(CASE WHEN 销售方式 = '线上' THEN 销售金额 ELSE 0 END) AS FLOAT) / CAST(SUM(销售金额) OVER() AS FLOAT) AS 线上占比,
    CAST(SUM(CASE WHEN 销售方式 = '线下' THEN 销售金额 ELSE 0 END) AS FLOAT) / CAST(SUM(销售金额) OVER() AS FLOAT) AS 线下占比
FROM 表名
WHERE 日期 >= 开始日期 AND 日期 <= 结束日期
GROUP BY 销售方式;
最近发表
标签列表