Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:基于字段描述用户类别的返回字符串_Sql - Fatal编程技术网

SQL:基于字段描述用户类别的返回字符串

SQL:基于字段描述用户类别的返回字符串,sql,Sql,这样做的目的是在结果中得到一个描述用户类别的新列。例如,根据用户年龄,该类别可以是18岁以下、正常、65岁以上 也就是说,对于表中的每个用户,我希望在名为category的列中获取其ID和描述 你将如何进行?我需要这样做,因为数据稍后将进入JSON对象和ExtJS网格进行可视化。由于您的类别是从现有数据派生的数据,因此不建议在数据库中为其使用新列。相反,您可以只向数据库查询中添加case语句,根据需要计算出类别,或者将其放入数据库中的视图中 查询将如下所示: select ...

这样做的目的是在结果中得到一个描述用户类别的新列。例如,根据用户年龄,该类别可以是18岁以下、正常、65岁以上

也就是说,对于表中的每个用户,我希望在名为category的列中获取其ID和描述


你将如何进行?我需要这样做,因为数据稍后将进入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多岁的类别时,维护起来会容易得多:-