jpa--17.JPQL的order和group

參看易百教程:https://www.yiibai.com/jpa/jpa_jpql.html

 

1      order by子句

1.1  語法

order by子句用於對查詢結果集進行排序。和SQL的用法類似,可以用“asc“和 "desc“指定升降序。如果不顯式註明,默認爲升序。

 

1.2  測試代碼

@Test
   public void testOrderBy(){
      Stringjpql= "FROM Customer c WHERE c.age > ?ORDER BY c.age DESC";
      Queryquery= entityManager.createQuery(jpql).setHint(QueryHints.HINT_CACHEABLE,true);
     
      //佔位符的索引是從 1 開始
      query.setParameter(1, 4);
      List<Customer>customers= query.getResultList();
      for (Customer customer : customers) {
         System.out.println(customer);
      }
   }


2      group by子句

2.1  group by子句

group by 子句用於對查詢結果分組統計,通常需要使用聚合函數。常用的聚合函數主要有AVG、SUM、COUNT、MAX、MIN 等,它們的含義與SQL相同。例如:select max(o.id) from Orders o

沒有 group by 子句的查詢是基於整個實體類的,使用聚合函數將返回單個結果值,可以使用Query.getSingleResult()得到查詢結果。例如:

 

2.2  having子句

Having 子句用於對 groupby 分組設置約束條件,用法與where 子句基本相同,不同是 where 子句作用於基表或視圖,以便從中選擇滿足條件的記錄;having 子句則作用於分組,用於選擇滿足條件的組,其條件表達式中通常會使用聚合函數。

例如,以下語句用於查詢訂購總數大於100的商家所售商品及數量:

select o.seller,o.goodId, sum(o.amount) from V_Orders o group by o.seller, o.goodId havingsum(o.amount) > 100

having子句與where子句一樣都可以使用參數。

        

2.3  測試代碼

//查詢 order 數量大於 2 的那些 Customer
   @Test
   public void testGroupBy(){
      Stringjpql= "SELECT o.customer FROM Order o "
            +"GROUP BY o.customer "
            +"HAVING count(o.id) >= 2";
      List<Customer>customers= entityManager.createQuery(jpql).getResultList();
 
      System.out.println(customers);
   }



 

發佈了456 篇原創文章 · 獲贊 27 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章