【问题标题】:JPA : Join and group by sum. MySQL queryJPA:按总和加入和分组。 MySQL 查询
【发布时间】:2013-03-12 14:59:05
【问题描述】:

我有两张桌子:salesproducts

[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();
}

这样的事情我该怎么做?

【问题讨论】:

    标签: java mysql jpa join


    【解决方案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
    

    【讨论】:

    • 谢谢 :) 但是,响应类型应该是什么?我无法退货,因为我会丢失数量信息...
    • 你能不能只返回一个 List 而不是 List
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    相关资源
    最近更新 更多