SQL中不知道列名通过列号求他们的和

有表T

 列号        1     2   3   4
 属性名     a     b   c   d
            k    10  20  30
            p    30   2   6

表中a为主键
怎么求a='k'时的第二列和第三列之和(前提是不知道属性名,只能通过列号运算)

sql 中没有“列号”一说,如果你不知道列名,可以通过
select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where TABLE_NAME='表名'
查询表中有什么字段,数据类型等信息。
然后再根据这个去查询你要的那个。

select 列名,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from 表的列名 where TABLE_NAME='表名'
这个就可以完成你的要求吧应该

获取当a=k时的所有数据,然后用结果集获取第二列和第三列的值呀,再求和

rs.getInt(int index); rs.getInt(String columName);要么根据索引,要么根据字段名称获取值

首先可以通过一下SQL来获取到你想要的列的列名,(下面的SQL只需要改表名,limit表示获取第一个列的列名):

SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME='test1' LIMIT 0,1

因为MySQL中没有函数能将一个 字符串 装换成一个字段/属性。
所以你有两种方式来实现 求a='k'时的第二列和第三列之和 的业务,第一,拆分业务 一个方法 获取到列名另一个方法使用获取到的列名 来重新拼接SQL来进行查询求和,第二 ,下一个存储过程在存储过程中先查询 到列名然后 拼接 SQL语句求和。

将值为k的数据取出,select sum(b_c) from TABLE where A='k'

最慢的方法,取出数据做累加和

select sum(b+c) as zh from (
select 1 as a,2 as b,3 as c,4 as d
from dual
) as kk
where a='k'
1.列号可以先对列起别名,如a,b,c,d
2.然后嵌套一个子查询,在根据列别名求和

要不现加载到内存,在对数据进行操作。
简单粗暴,效率高。

把每一个列举出来,然后求和

图片说明

图片说明