【问题标题】:How to get enum element from index如何从索引中获取枚举元素
【发布时间】:2009-09-09 05:37:52
【问题描述】:

我有一个选择,我在其中进行“分组”。其中一列是枚举,我想为每个组选择最大值(即枚举中索引最大的那个)。我可以的

select MAX(enum_column+0) as enum_index 

要获得组中最大的索引,但是如何将枚举索引转回枚举项?


示例: 假设我有一个包含三列的“士兵”表:

"id" - soldier's ID
"name" is the soldier's first name (a varchar field).
"rank" is the soldier's rank, and it is an enum: 
{'private','sergent'...,'lieutenant' etc.} 

现在假设我想为每个名字查找具有该名字的人的最高等级。 我能做到:

select MAX(rank+0) as enum_index,name from soldiers group by name

但这会给我枚举字段中最大元素的索引,而不是元素的名称。即它会给我:

1 | john
2 | bob

我想要的地方

'private' | john
'sergent' | bob 

我怎样才能达到预期的效果?

【问题讨论】:

  • 您错过了 rank 是如何变成字符串/varchar rank_name 值的数字。
  • 我不确定我是否理解你,但如果你的意思是我没有解释从 string 到 int 的变化,那是因为它是 ENUM 类型...

标签: mysql sql enums indexing


【解决方案1】:

运行以下

CREATE TABLE ranks
SELECT DISTINCT rank+0 as id, CONCAT('',rank) as rank
FROM soldiers

然后将数据与士兵表连接起来。请注意,它只会为您提供实际使用的等级。

【讨论】:

    【解决方案2】:
    SUBSTR( MAX(CONCAT(0+column, column)), 2)
    

    concat 将生成类似0private1sergeant 的项目;获取MAX 时,这些将被排序为字符串。在这种情况下,这与按枚举顺序排序相同。最后,初始数字被substr 删除。

    如果您的枚举中有超过 10 项,则必须使用前导数字格式化数值并删除 substr 调用中的附加数字。

    【讨论】:

      猜你喜欢
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多