SQL:基于字段描述用户类别的返回字符串
这样做的目的是在结果中得到一个描述用户类别的新列。例如,根据用户年龄,该类别可以是18岁以下、正常、65岁以上 也就是说,对于表中的每个用户,我希望在名为category的列中获取其ID和描述SQL:基于字段描述用户类别的返回字符串,sql,Sql,这样做的目的是在结果中得到一个描述用户类别的新列。例如,根据用户年龄,该类别可以是18岁以下、正常、65岁以上 也就是说,对于表中的每个用户,我希望在名为category的列中获取其ID和描述 你将如何进行?我需要这样做,因为数据稍后将进入JSON对象和ExtJS网格进行可视化。由于您的类别是从现有数据派生的数据,因此不建议在数据库中为其使用新列。相反,您可以只向数据库查询中添加case语句,根据需要计算出类别,或者将其放入数据库中的视图中 查询将如下所示: select ...
你将如何进行?我需要这样做,因为数据稍后将进入JSON对象和ExtJS网格进行可视化。由于您的类别是从现有数据派生的数据,因此不建议在数据库中为其使用新列。相反,您可以只向数据库查询中添加case语句,根据需要计算出类别,或者将其放入数据库中的视图中 查询将如下所示:
select
...
case when Age < 18 then 'under18'
when Age > 65 then 'over65'
else 'normal' end AS Age_Category
from ...
由于您的类别是从现有数据派生的数据,因此不鼓励在数据库中为其使用新列。相反,您可以只向数据库查询中添加case语句,根据需要计算出类别,或者将其放入数据库中的视图中 查询将如下所示:
select
...
case when Age < 18 then 'under18'
when Age > 65 then 'over65'
else 'normal' end AS Age_Category
from ...
在查询级别,这可以通过CASE表达式完成:
select
user_id,
case when age < 18 then 'under18'
when age <=65 then 'normal'
when age > 65 then 'over65'
else null end as category
from
Users
不过,我建议将其从查询级别移动到应用程序级别。您已经有了从数据集构造JSON的应用程序逻辑,这将是从年龄值生成类别名称的更合适的位置。在查询级别,这可以通过CASE表达式完成:
select
user_id,
case when age < 18 then 'under18'
when age <=65 then 'normal'
when age > 65 then 'over65'
else null end as category
from
Users
不过,我建议将其从查询级别移动到应用程序级别。您已经有了从数据集构造JSON的应用程序逻辑,这将是从年龄值生成类别名称的更合适的位置。如果您的DBMS支持它,我将创建一个UDF用户定义函数,从表中传入年龄并返回类别。这具有可重复使用和稍微清洁的优点。如果这只是一个查询,只需使用CASE语句。如果您的DBMS支持它,我将创建一个UDF用户定义函数,从表中传入年龄并返回类别。这具有可重复使用和稍微清洁的优点。如果只针对一个查询,请使用CASE语句。使用UDF的一个问题是,每次需要调用UDF时都会产生开销。但是,对于复杂的类别,它们可能是唯一的方法。这种case语句语法真的有效吗?如果是的话,在哪个dbms中?我的错,你只能像我一样精确比较一个值,而不是使用小于或大于。这就是我通常在做直接相等测试时编写它们的方式,因为这样可以使它们更短。至于UDF,我同意会有一些开销,但如果这是一个大型复杂系统的一部分,当添加一个40多岁的新类别时,它将更容易维护:-使用UDF的一个问题是每次需要调用它时都会产生开销。但是,对于复杂的类别,它们可能是唯一的方法。这种case语句语法真的有效吗?如果是的话,在哪个dbms中?我的错,你只能像我一样精确比较一个值,而不是使用小于或大于。这就是我通常在进行直接相等测试时编写它们的方式,因为这样可以使它们稍微短一些。至于UDF,我同意会有一些开销,但如果这是一个大型复杂系统的一部分,那么在添加新的40多岁的类别时,维护起来会容易得多:-