有temp表包含A,B两列,使用SQL,对B列进行处理,形成C列,按A列顺序,B列值不变,则C列累计技术,B列值变化,则C列重新开始计数

有temp表,使用SQL,对B列进行处理,形成C列,按A列顺序,B列值不变,则C列累计技术,B列值变化,则C列重新开始计数

建表语句如下

CREATE TABLE temp(
    A STRING 
    ,B STRING 
);

INSERT INTO TABLE temp VALUES
        ('2010','1')
        ,('2011','1')
        ,('2012','1')
        ,('2013','0')
        ,('2014','0')
        ,('2015','1')
        ,('2016','1')
        ,('2017','1')
        ,('2018','0')
        ,('2019','0')
;

解题SQL如下:

SELECT  a
        ,b
        ,ROW_NUMBER() OVER (PARTITION BY group_tag ORDER BY a ) c
FROM    (
            SELECT  *
                    ,SUM(lag_tag) OVER (ORDER BY a ) AS group_tag
            FROM    (
                        SELECT  *
                                ,IF(LAG(b,1) OVER (ORDER BY a ) != b
                                OR      LAG(b,1) OVER (ORDER BY a ) IS NULL,1,0) AS lag_tag
                        FROM    tmp_train_sql
                    ) t1
        ) t2
;
### 回答1: 可以使用 if 语句和比较运算符来实现这个要求,代码如下: if (a <= b && b <= c) { printf("%d %d %d\n", a, b, c); } else if (a <= c && c <= b) { printf("%d %d %d\n", a, c, b); } else if (b <= a && a <= c) { printf("%d %d %d\n", b, a, c); } else if (b <= c && c <= a) { printf("%d %d %d\n", b, c, a); } else if (c <= a && a <= b) { printf("%d %d %d\n", c, a, b); } else { printf("%d %d %d\n", c, b, a); } ### 回答2: 在C语言中,要按大小顺序输出三个数a、b、c,可以使用if-else语句进行比较和交换操作。以下是一个简单的实现方式: 首先,我们可以使用键盘输入或其他方式获取三个数a、b、c的值。接下来,使用if-else语句进行判断和交换操作,以实现按照大小顺序输出。 假设我们的目标是将这三个数按照从小到大的顺序输出,即a <= b <= c。 1. 首先,我们可以比较a和b的大小: - 如果a大于b,则交换a和b的值,以保证a小于等于b。 - 如果a小于等于b,则不需要交换。 2. 接下来,比较b和c的大小: - 如果b大于c,则交换b和c的值,以保证b小于等于c。 - 如果b小于等于c,则不需要交换。 3. 最后,按照从小到大的顺序输出这三个数,即先输出a,再输出b,最后输出c。 下面是一个示例代码的实现: ```c #include <stdio.h> int main() { int a, b, c; // 获取a、b、c的值,此处假设通过键盘输入获取 printf("输入三个数a、b、c的值,用空格隔开:"); scanf("%d %d %d", &a, &b, &c); // 判断和交换操作 if (a > b) { int temp = a; a = b; b = temp; } if (b > c) { int temp = b; b = c; c = temp; } // 输出结果 printf("按大小顺序输出的结果为:%d %d %d\n", a, b, c); return 0; } ``` 以上代码即可按照从小到大的顺序输出三个数a、b、c。 ### 回答3: 要按照大小顺序输出三个数a、b、c,可以使用条件判断语句和交换变量的值的方法进行排序。 首先,我们可以使用if语句嵌套来判断三个数的大小关系,并进行一次交换,使得a变量存储最小的值,b变量存储中间的值,c变量存储最大的值。代码如下: ``` if(a > b){ int temp = a; a = b; b = temp; } if(b > c){ int temp = b; b = c; c = temp; } if(a > b){ int temp = a; a = b; b = temp; } ``` 经过这个if语句嵌套的处理,现在a的值是最小的,b的值是中间的,c的值是最大的。 然后,我们就可以按照顺序输出这三个数了。使用printf函数可以实现输出功能。代码如下: ``` printf("%d %d %d\n", a, b, c); ``` 通过这段代码,将会以大小顺序输出a、b、c这三个值。 完整的代码如下所示: ``` #include <stdio.h> int main() { int a, b, c; printf("输入三个整数:"); scanf("%d %d %d", &a, &b, &c); if(a > b){ int temp = a; a = b; b = temp; } if(b > c){ int temp = b; b = c; c = temp; } if(a > b){ int temp = a; a = b; b = temp; } printf("按大小顺序输出为:%d %d %d\n", a, b, c); return 0; } ``` 这段代码会要求用户输入三个整数,然后按照大小顺序输出这三个数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值