HQL中 distinct 和 count

machao299 2009-09-21 05:12:36
String counthql="select count(*) from (select distinct trainOrder.userid, trainOrder.course from TrainOrder trainOrder where trainOrder.course in (select course.courseId from KmsCourse course where course.knowledgeId='"+ knowledgeId + "')) as t";


请问这条语句哪里错了啊 在我网上找来好多都是一样的 到我这就报 :line 21 unexpected token:(
和line 87 unexpected token: from 这两个提示。
哪位遇到过啊。
...全文
1551 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
签约梦想 2010-11-25
  • 打赏
  • 举报
回复
select count(distinct ud.user) from t_user_dept ud group ud.user; 这个hql 语句行吗?
lxyd000 2009-09-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cseu 的回复:]
你这样的要求,应该用group by userid, courseId啊。

上面有人提到hql里不能用临时表,我也有这种印象
[/Quote]
应该是。
xiaozhangnima 2009-09-23
  • 打赏
  • 举报
回复
学习
cseu 2009-09-23
  • 打赏
  • 举报
回复
你这样的要求,应该用group by userid, courseId啊。

上面有人提到hql里不能用临时表,我也有这种印象
machao299 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yizhao_come_on 的回复:]
我记得hql语句好像不支持 select 。。 from () a ; 不支持这种,from 直接写数据库存在的表 而不能使用临时生成的表。
[/Quote]
我用的 Hibernate
trainOrderId courseId courseWareId userId
1 c_10 cw10 admin
2 c_10 cw11 admin
3 c_10 cw12 admin
4 c_10 cw13 admin
5 c_10 cw14 admin

6 c_20 cw10 admin
7 c_20 cw11 admin
8 c_20 cw12 admin
9 c_20 cw20 admin
10 c_20 cw22 admin

11 c_10 cw10 tset
12 c_10 cw11 tset
13 c_10 cw12 tset
14 c_10 cw13 tset
15 c_10 cw14 tset

16 c_20 cw10 tset
17 c_20 cw11 tset
18 c_20 cw12 tset
19 c_20 cw20 tset
20 c_20 cw22 tset
我现在只想统计出 admin c_10 出现一次
admin c_20 出现一次
test c_10 出现一次
test c_20 出现一次
请问我的 String counthql="select count(*) from (select distinct trainOrder.userid, trainOrder.course from TrainOrder trainOrder where trainOrder.course in (select course.courseId from KmsCourse course where course.knowledgeId='"+ knowledgeId + "')) as t"; 不对吗?

machao299 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lgg201 的回复:]
上面发的这个可能不行, 你还是得讲下select distinct trainOrder.userid, trainOrder.course 你查询distinct的userid还有course是什么意图...

你的distinct语法有错, distinct是用括号的DISTINCT(trainOrder.userid)这样写.
[/Quote]
distinct trainOrder.userid, trainOrder.course 是想去除这两列重复的数据 执行到没报错。
machao299 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sxq51189540 的回复:]
如果想查询有多少条记录的话我觉得是不是应该这样啊
select count(distinct trainOrder.userid)
          from TrainOrder trainOrder
        where trainOrder.course in
              (select course.courseId
                  from KmsCourse course
                where course.knowledgeId = '"+ knowledgeId + "')
[/Quote]
哥哥你这个我试过了 可以执行 但是 count(distinct trainOrder.userid) 的限制条件不够 查出来的数据多了 不准确。我必须用 distinct trainOrder.userid trainOrder.course 这两个条件限制。再统计总条数。
yizhao_come_on 2009-09-21
  • 打赏
  • 举报
回复
我记得hql语句好像不支持 select 。。 from () a ; 不支持这种,from 直接写数据库存在的表 而不能使用临时生成的表。
goosman 2009-09-21
  • 打赏
  • 举报
回复
还有, HQL功能很强大的, 不要把自己局限到SQL的思想中, 要用对象的眼光看你的实体, 不要把自己限制成关系思维, 不然Hibernate用了跟没有用就没多大区别了.
goosman 2009-09-21
  • 打赏
  • 举报
回复
上面发的这个可能不行, 你还是得讲下select distinct trainOrder.userid, trainOrder.course 你查询distinct的userid还有course是什么意图...

你的distinct语法有错, distinct是用括号的DISTINCT(trainOrder.userid)这样写.
goosman 2009-09-21
  • 打赏
  • 举报
回复

SELECT COUNT(*) FROM TrainOrder trainOrder WHERE trainOrder.course.knowledgeId = ? GROUP BY trainOrder.userid

试试这个吧....如果不对, 把你发的那个hql的每个属性的意思贴出来看看
sxq51189540 2009-09-21
  • 打赏
  • 举报
回复
不好意思写错了,能不能把表结构整出来
sxq51189540 2009-09-21
  • 打赏
  • 举报
回复
如果想查询有多少条记录的话我觉得是不是应该这样啊
select count(distinct trainOrder.userid)
from TrainOrder trainOrder
where trainOrder.course in
(select course.courseId
from KmsCourse course
where course.knowledgeId = '"+ knowledgeId + "')

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧