You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HQL实操问题:class_id规则设置及按Student_id提取最高book_id方法

HQL问题解决方案

问题1:仅对class_id=12应用规则且保留所有class_id输出

不要使用where class_id = 12过滤数据,否则会丢失其他class_id的行,推荐使用case when条件判断实现规则仅对目标class_id生效,其他class_id保留原始值即可。

示例逻辑(以对class_id=12的学生统计附加分为例,可替换为你实际的业务规则):

select 
  class_id,
  student_id,
  -- 仅class_id=12时应用规则,其他返回原字段值
  case when class_id = 12 then score + 15 else score end as final_score,
  other_fields
from your_table_name;

HQL也支持简化的if函数写法,逻辑等效:

select 
  if(class_id = 12, [你的规则逻辑], 原字段名) as target_field
from your_table_name;

问题2:按student_id分组取数值最大的book_id

首先提取book_id前两位字母之后的数字部分,转换为数值类型后排序,再用窗口函数取每组最大值对应行即可,避免字符串排序出现的数值判断错误问题。

示例代码:

select student_id, book_id
from (
  select 
    student_id,
    book_id,
    -- 按学生分组,按book_id的数值部分倒序排序
    row_number() over(partition by student_id order by cast(substr(book_id,3) as bigint) desc) as rn
  from your_table_name
) t
where rn = 1; -- 取每个学生数值最大的book_id

说明:substr(book_id,3)表示从book_id的第3位开始截取到末尾,得到纯数字字符串,cast as bigint转换为长整型数值排序,保证数值大小判断准确。


内容的提问来源于stack exchange,提问作者Matias021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:42:01