【问题标题】:how to select group by LEFT(t.field, 6) in HQL?如何在 HQL 中按 LEFT(t.field, 6) 选择组?
【发布时间】:2014-10-22 07:35:29
【问题描述】:

干净的 SQL 语法 (MySQL) 允许使用 "group by LEFT(...)" 进行选择 示例:

SELECT * FROM `table` t  
WHERE t.field1 = 777 AND t.field2 = 0 
GROUP BY LEFT(t.field3, 6) 
HAVING COUNT(*) = 4;

但如果我尝试使用 HQL:

" select t  from TableEntity t " +
" where t.field1 = :field_1 and t.field2 = :field_2 " +
" group by LEFT(t.field3, 6) " +
" having COUNT(*) = :other_condition "

我有一个例外 org.hibernate.hql.ast.QuerySyntaxException:意外令牌:靠近第 1 行第 12 列的左侧 [

这种情况下可以使用HQL吗?

【问题讨论】:

    标签: java mysql sql hql


    【解决方案1】:

    我不认为你可以做你想做的事,因为 MySQL 扩展了 group by —— 其他数据库通常不支持的扩展。你可以这样做:

    SELECT substring(t.field3, 1, 6), count(*) as cnt
    FROM `table` t  
    WHERE t.field1 = 777 AND t.field2 = 0 
    GROUP BY substring(t.field3, 1, 6)
    HAVING COUNT(*) = 4;
    

    请注意,group by 中的未聚合列也在 select 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2016-06-25
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多