【问题标题】:How to count rows group wise in mysql with java and hibernate?如何使用java和hibernate在mysql中计算行组?
【发布时间】:2014-05-24 11:36:56
【问题描述】:

我有一个包含一张表和两列的数据库“javachat”。 其中一列称为“昵称”,第二列称为“帖子”,因此它看起来像:

nick1 post1
nick2 post2
nick1 post3
nick2 post4

现在:我需要计算每个昵称写了多少帖子(我必须计算我在数据库中有多少昵称以及它们出现了多少次)。我也知道昵称很重要,因为我想创建包含昵称和帖子数量的图表。

也许这个问题很愚蠢,但我无法通过搜索找到任何东西。我现在写的代码只是连接数据库,我现在不知道该怎么做。

private ???????? downStats() {
        try{
        Session sess = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = sess.beginTransaction();


        tx = null;
        sess.disconnect();

    }
              catch (HibernateException e) {
        if (tx!=null) tx.rollback();
        e.printStackTrace();
        textArea.append("Sorry - could connect to the database!");

    }
    }

有什么想法吗?提前感谢您的任何提示。

【问题讨论】:

  • 你创建过实体类吗?

标签: java mysql hibernate count


【解决方案1】:

假设你的表名是Table

select name, count(post) from Table group by name;


这就是我收到您的问题的方式,如果我答错了,请用预期结果更新您的问题。

【讨论】:

    【解决方案2】:

    请尝试以下查询

    SELECT COLUMN-NAME-OF-NICKNAMES, COUNT(1) FROM TABLENAME GROUP BY COLUMN-NAME-OF-NICKNAMES
    

    这将返回每个昵称和帖子数。

    【讨论】:

      【解决方案3】:

      这是您必须使用的关联 SQL 查询:

      "SELECT nickname, count(*) FROM my_table GROUP BY nickname"
      

      现在,您需要为此使用 Hibernate。

      sess.createCriteria(MyTable.class)       
          .setProjection(Projections.projectionList()
                         .add(Projections.groupProperty("nickname"))
                         .add(Projections.count("someColumn"))           
          ).list();
      

      看看here

      【讨论】:

      • groupProperty - 我知道这是列的名称,但计数 - someColumn?我不明白。
      • 对不起,您应该将 'someColumn' 替换为 'posts' 或 '1' 以返回帖子数或检索到的行数。无论哪种方式都会返回正确的值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多