Mysql 如何在select查询中使用列名称的动态选择进行求和?
我想我可能是处理这一切都错了,所以如果我是请让我知道 我有一张像这样的桌子:Mysql 如何在select查询中使用列名称的动态选择进行求和?,mysql,sql,Mysql,Sql,我想我可能是处理这一切都错了,所以如果我是请让我知道 我有一张像这样的桌子: Id | Region | 0 | 10 | 20 | 30 | 40 | 50 ----------------------------------------- 01 | London | 24 | 45 | 38 | 29 | 36 | 49 ----------------------------------------- 02 | Bham | 27 | 42 | 33 | 31 | 38 | 41
Id | Region | 0 | 10 | 20 | 30 | 40 | 50
-----------------------------------------
01 | London | 24 | 45 | 38 | 29 | 36 | 49
-----------------------------------------
02 | Bham | 27 | 42 | 33 | 31 | 38 | 41
-----------------------------------------
03 | Lpool | 23 | 38 | 29 | 31 | 34 | 49
其中一行代表一个区域,后面是年龄范围为0-10、10-20、20-30等的人口。我希望能够为给定的年龄范围选择人口总数。例如,对于10-40:
SELECT (p.10 + p.20 + p.30) FROM Population p WHERE Id = 01
我该如何使用自定义范围进行此操作?例如,一个存储过程,它接受年龄范围的最小值和最大值。SP不是问题所在,只是能够动态定义要求和的列范围 如果要在自定义范围内选择,查询如下所示:- 从中选择*
介于和之间的位置 您可以使用“AND”操作给出另一个条件 你做错了
SELECT (p.10 + p.20 + p.30) FROM Population p WHERE Id = 01
您缺少人口p之间的下划线。别的
试试这个:
SELECT * FROM table WHERE BETWEEN 10 and 40 AND id=id_no
在这种情况下,可能最好构建一个表
人口(Id、地区、年龄)
,从而以行而不是几列的形式显示数字。这也是我的想法,但我有一个很好的CSV格式的数据,以这种当前格式组织,更不确定如何进行转换!如果我没有得到任何答案,我可能不得不咬紧牙关接受你的建议!如果你不采纳这个建议,从长远来看,你可能会吃更多的苦头。我同意其他评论者的意见,他们建议取消这些数据。我不认为有一个很好的答案来回答所提出的问题。但是对于行,这里的列应该在0到10之间。来自人口p的符号是有效的SQL;它为Population
提供了表别名p
,因此可以使用p.column
表示法。像p.10
这样的名称是可疑的,因为10
不是有效的列名。在MySQL中,您可能必须将名称括在后面的记号中:p.`10`…
(这在MarkDown中是地狱),或者在标准SQL中,您可以使用分隔标识符p.“10”
——或者您可以将列重命名为有效名称,如ages\u 0\u 9
、ages\u 10\u 19
,或者类似的方案。