【问题标题】:How to retrieve the ordered list of best articles having a minimum number of votes by using HQL?如何使用 HQL 检索具有最少投票数的最佳文章的有序列表?
【发布时间】:2010-06-06 22:09:42
【问题描述】:

我的 grails 应用程序中有一个 Vote 域类,其中包含 article_idnote 等属性

我想 HQL 查询 Vote 域类,以检索 5 篇评分最高且至少获得 10 票的文章。

我试过了:

SELECT v.article_id, avg(v.note), count(*) FROM vote v where count(*) >= 10  group by v.article_id order by avg(v.note) desc limit 5;

但不幸的是where count(*) >= 10的插入会引发错误。

我怎样才能以简单的方式做到这一点?

感谢您的帮助。

【问题讨论】:

    标签: java sql hibernate grails hql


    【解决方案1】:

    由于无法对其进行测试,我不愿尝试猜测最终查询的外观,但HAVING COUNT(*) >= 10 可能值得一看。

    http://www.sqlcommands.net/sql+having/

    【讨论】:

      【解决方案2】:

      试试看:

      SELECT v.article_id, avg(v.note),
      FROM vote v 
      GROUP BY v.article_id
      HAVING count(*) >= 10
      OREDER BY avg(v.note) desc limit 5;
      

      【讨论】:

        【解决方案3】:

        以下方法不起作用吗?

        SELECT v.article_id, avg(v.note), count(*) as count 
        FROM vote v 
        where count >= 10  
        group by v.article_id 
        order by avg(v.note) desc limit 5;
        

        稍后编辑:试试这个

        SELECT v.article_id, avg(v.note) 
        from vote v 
        group by v.article_id 
        having count(*) >= 10
        order by avg(v.note) desc limit 5;
        

        【讨论】:

        • 不是 100% 确定,但我认为您不能在同一查询的 WHERE 中使用计数别名
        • 根本不工作。看来我们不能在 WHERE 中使用计数别名
        • 啊..我很害怕 :(. 有路要走。
        猜你喜欢
        • 2011-09-22
        • 2015-03-11
        • 1970-01-01
        • 2013-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-14
        • 1970-01-01
        相关资源
        最近更新 更多