2013-03-22 58 views
1

我有兩個表:salesproductsJPA:加入並按總和分組。 MySQL查詢

[Products] 
+-------+-------------------+ 
| id | name    | 
+-------+-------------------+ 
| 1  | product number 1 | 
| 2  | product number 2 | 
| 3  | product number 3 | 
+-------+-------------------+ 

[Sales] 
+-------+------------+------+ 
| id | product_id | qty | 
+-------+------------+------+ 
| 1  | 2   | 100 | 
| 2  | 2   | 35 | 
| 3  | 1   | 1 | 
+-------+-------------------+ 

我想顯示像這樣用的JavaEE和JPA:

Most selled products : 
+------------------+------------+ 
| Product name  | Quantity | 
+------------------+------------+ 
| product number 2 | 135  | 
| product number 1 | 1   | 
+------------------+------------+ 

我面臨兩個問題:

  • 我只知道如何檢索對象,所以我可以顯示產品的名稱,但不是數量已選,因爲它是一個計算值。
  • 我不知道如何查詢我的數據庫來獲取正確的信息

這是我已經試過:

public List<Product> getMostSelledProducts() { 
    Query q = em.createQuery("SELECT p FROM Sale s RIGHT JOIN Product p GROUP BY s.productId ORDER BY COUNT(s.productId)"); 
    return q.getResultList(); 
} 

我應該怎麼做這樣的事?

回答

1

不確定這是否有效,沒有測試,但如果不起作用,可能會將您設置在正確的路徑上。

SELECT p.name, SUM(s.qty) as Quantity FROM Sales s 
INNER JOIN Product p ON s.product_id = p.id 
GROUP BY s.product_id 
ORDER BY Quantity DESC 
+0

謝謝:)但是,那麼應該是什麼類型的迴應?我無法返回產品,因爲我會丟失數量信息... – mimipc 2013-03-22 17:05:38

+0

您能否僅返回列表而不是列表? – spullen 2013-03-22 17:12:39