笔试记录 01

有这样一个数列1,1,2,3,5,8,13,21,34...写出计算数列任意位数值的函数

这个数列是斐波那契数列,可以使用递归或迭代方法来计算任意位数值。

function fibonacci(n)  
    if n <= 0 then  
        return "输入错误,n必须大于0"  
    else if n == 1 then  
        return 0  
    else if n == 2 then  
        return 1  
    else  
        fib = fibonacci(n - 1) + fibonacci(n - 2)  
        return fib  
    end if  
end function
def fibonacci(n):  
    if n <= 0:  
        return "输入错误,n必须大于0"  
    elif n == 1:  
        return 0  
    elif n == 2:  
        return 1  
    else:  
        fib = fibonacci(n - 1) + fibonacci(n - 2)  
        return fib

这个函数接受一个参数n,表示要计算的位数。如果n小于等于0,函数返回错误信息;如果n等于1,函数返回0;如果n等于2,函数返回1;否则,函数递归调用自身来计算第n位的斐波那契数列值,并返回结果。

求表达式的值 1-2+3-4+5-6+7-8....+m,写出计算数列任意位数值的函数,请用伪代码写

function calculateFibonacci(n)  
    if n <= 0 then  
        return "输入错误,n必须大于0"  
    else if n == 1 then  
        return 1  
    else if n == 2 then  
        return 1  
    else  
        sum = 0  
        for i = 1 to n-1 do  
            if i % 2 == 0 then  
                sum = sum - 1  
            else  
                sum = sum + 1  
            end if  
        end for  
        return sum + calculateFibonacci(n-1)  
    end if  
end function
def fibonacci(n):  
    if n <= 0:  
        return "输入错误,n必须大于0"  
    elif n == 1:  
        return 1  
    elif n == 2:  
        return 1  
    else:  
        if n % 2 == 0:  
            return fibonacci(n-1) - fibonacci(n-2)  
        else:  
            return fibonacci(n-1) + fibonacci(n-2)

这个函数接受一个参数n,表示要计算的位数。如果n小于等于0,函数返回错误信息;如果n等于1或2,函数返回1;否则,函数先计算前n-1位的和,根据位数的奇偶性来确定是加上还是减去1,然后将结果与前n-1位的和相加得到最终结果。

表a
aID    aNum
1    a20050111
2    a20050112
3    a20050113
4    a20050114
5    a20050115
表b
bID    bName
1    2006032401
2    2006032402
3    2006032403
4    2006032404
8    2006032408
查询结果
aID    aNum        bID    bName
1    a20050111    1    2006032401
2    a20050112    2    2006032402
3    a20050113    3    2006032403
4    a20050114    4    2006032404
5    a20050115    NULL    NULL

aID    aNum        bID    bName
1    a20050111    1    2006032401
2    a20050112    2    2006032402
3    a20050113    3    2006032403
4    a20050114    4    2006032404

aID    aNum        bID    bName
1    a20050111    1    2006032401
2    a20050112    2    2006032402
3    a20050113    3    2006032403
4    a20050114    4    2006032404
5    a20050115    NULL    NULL
NULL    NULL        8    2006032408
请写出具体的SQL语句

SELECT a.aID, a.aNum, b.bID, b.bName  
FROM a  
LEFT JOIN b ON a.aID = b.bID;

这个查询使用了LEFT JOIN操作,它返回所有左表(在这里是表a)的行,以及与右表(在这里是表b)匹配的行。如果右表中没有匹配的行,那么返回的列将包含NULL值。在这个查询中,当aID在表b中没有对应项时,bID和bName将被设置为NULL。执行这个查询后,将得到以上查询结果。

特征表 feat

id    cust_no    name    model_id    score
1    2005001    张三      0001           69
2    2005002    李四      0001           89
3    2005001    张三      0001           69
4    2005003    王五      0001           70
请写出查询有重复记录的cust_no的SQL语句

SELECT cust_no  
FROM feat  
GROUP BY cust_no  
HAVING COUNT(*) > 1;

这个SQL语句使用GROUP BY子句按照cust_no对数据进行分组,然后使用HAVING子句筛选出分组后记录数大于1的组,即有重复记录的cust_no。最终结果将只包含有重复记录的cust_no

一个叫team的表,里面只有一个字段name,一共四条记录,分别是a,b,c,d,对应四个球队,现在四个球队进行比赛,用一条SQL语句显示所有比赛组合。

在SQL中,我们可以使用 CROSS JOIN 来生成所有可能的组合。

SELECT t1.name AS team1, t2.name AS team2  
FROM team t1  
CROSS JOIN team t2;

这条SQL语句会生成一个结果集,其中每一行都代表一个可能的比赛组合。例如,第一行可能是 "a vs b",第二行可能是 "a vs c",以此类推。这个结果集将包含16行,因为每个球队都要和其他三个球队进行比赛。

有一张预测结果表,抽取出每个城市中风险概率最高的100客户

user_id    city    pred
0001    深圳    0.81
0002    北京    0.75
0003    上海    0.76
0004    北京    0.81
0005    上海    0.75
0006    深圳    0.76
0007    北京    0.81

请写出具体SQL语句或者利用SQL相关语法说明

SELECT user_id, city, pred  
FROM your_table_name  
ORDER BY city, pred DESC  
LIMIT 100;

需要将"your_table_name"替换为你的实际表名。这个语句使用了ORDER BY来按照城市和风险概率进行排序,其中城市是第一个排序条件,风险概率是第二个排序条件。由于我们想要获取每个城市中风险概率最高的100客户,因此我们对风险概率使用DESC(降序)排序,并且使用LIMIT 100来限制结果集的大小为100行。这样,每个城市中风险概率最高的100客户将会被返回。

有四张模型预测结果表(model1-model4),要求写SQL根据用户Id吧它合成一张四维的宽表

model1表:model2表
user_id    pred    user_id    pred
0001    0.81    0001    0.81
0002    0.75    0002    0.75
0003    0.76    0003    0.76

model3表:model4表
user_id    pred    user_id    pred
0003    0.81    0007    0.81
0004    0.75    0008    0.75
0006    0.76    00010    0.76

请写出具体的SQL语句或者利用SQL语法解释

首先需要将这四张表连接起来,然后根据user_id进行分组,并将每个组的数据连接在一起。

SELECT  
  user_id,  
  MAX(CASE WHEN model = 'model1' THEN pred ELSE NULL END) AS model1_pred,  
  MAX(CASE WHEN model = 'model2' THEN pred ELSE NULL END) AS model2_pred,  
  MAX(CASE WHEN model = 'model3' THEN pred ELSE NULL END) AS model3_pred,  
  MAX(CASE WHEN model = 'model4' THEN pred ELSE NULL END) AS model4_pred  
FROM (  
  SELECT  
    user_id,  
    pred,  
    'model1' AS model  
  FROM model1  
  UNION ALL  
  SELECT  
    user_id,  
    pred,  
    'model2' AS model  
  FROM model2  
  UNION ALL  
  SELECT  
    user_id,  
    pred,  
    'model3' AS model  
  FROM model3  
  UNION ALL  
  SELECT  
    user_id,  
    pred,  
    'model4' AS model  
  FROM model4  
) AS subquery  
GROUP BY user_id;

这个SQL语句使用了子查询聚合函数。首先,我们将四张表中的数据连接在一起,并添加了一个名为model的列,用于指示数据来自哪张表。然后,我们使用GROUP BY语句按照user_id进行分组,并使用MAX函数来选择每个组中的最大值。在MAX函数中,我们使用CASE语句来根据model列的值选择正确的pred值。如果数据来自model1表,则选择对应的pred值;否则选择NULL值。最后,我们使用AS关键字为每个列指定别名,以创建最终结果表中的四维宽表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值