【问题标题】:JPQL / SQL: How to select * from a table with group by on a single column?JPQL / SQL:如何从单个列上的分组表中选择 *?
【发布时间】:2011-02-13 00:03:25
【问题描述】:

我想选择表的每一列,但想在我的行的单个属性(示例中的城市)上具有不同的值。我不想要额外的列,比如计数或任何东西,只想要有限数量的结果,而且似乎不可能直接限制 JPQL 查询中的结果。

原表:

ID    |   Name   |   City
---------------------------
1     |   John   |   NY
2     |   Maria  |   LA
3     |   John   |   LA
4     |   Albert |   NY

想要的结果,如果我在 City 上做不同的事情:

ID    |   Name   |   City
---------------------------
1     |   John   |   NY
2     |   Maria  |   LA

最好的方法是什么?感谢您的帮助。

【问题讨论】:

  • 约翰和艾伯特都在纽约。您是否不在乎结果中单个 NY 行返回哪个?洛杉矶也有类似的问题。
  • 其实我想要那些ID最低的

标签: orm jpa limit distinct jpql


【解决方案1】:

不知道 JPQL,但 SQL 应该是:

SELECT x.*
  FROM TABLE x
  JOIN (SELECT MIN(t.id) AS min_id,
               t.city
          FROM TABLE t
      GROUP BY t.city) y ON y.min_id = x.id
                        AND y.city = x.city

【讨论】:

    【解决方案2】:

    在 JPQL 中,您可以这样做:

    select e 
    from MyEntity e 
    where e.id in (select min(e.id) from MyEntity e group by e.city) 
    

    这会返回:

    MyEntity [id=1, name=John, city=NY]
    MyEntity [id=2, name=Maria, city=LA]
    

    【讨论】:

    • 优秀。我只需要用“select *”替换“select e”就可以了。非常感谢!
    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2020-12-20
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多