【问题标题】:QueryDSL Group By Row Count按行数查询DSL组
【发布时间】:2017-11-18 13:05:28
【问题描述】:

我被困在通过查询结果获取组的总数。

JPAQuery jpaQuery = new JPAQuery(entityManager);
jpaQuery.from(QMessageSend.messageSend)
        .where(predicate)
        .groupBy(QMessageSend.messageSend.messageId).count();

这是我当前的代码。
并且此代码返回每个组的计数。

SELECT count(*)
FROM MESSAGE_SEND ms
GROUP BY ms.MESSAGE_ID

但我想按查询结果获取组的总数。 类似下面sql的结果

SELECT count(*)
FROM (
   SELECT *
   FROM MESSAGE_SEND ms
   GROUP BY ms.MESSAGE_ID
) msc

我该怎么办?

MESSAGE_ID 不是主键。 并且 JPAQuery 的 distinct 方法不支持选择特定列。 (没有参数)

【问题讨论】:

    标签: java sql jpa querydsl


    【解决方案1】:

    我想你想要COUNT(DISTINCT):

    SELECT COUNT(DISTINCT s.MESSAGE_ID)
    FROM MESSAGE_SEND ms;
    

    如果MESSAGE_ID是表中的主键,那么COUNT(*)就足够了。

    【讨论】:

    • MESSAGE_ID 不是主键。和 JPAQuery distinct 方法不支持选择列。 ;(
    • @chooco13 。 . .回答后我注意到了对 JPA 的关注。这能回答问题吗? stackoverflow.com/questions/6197591/….
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多