java - HQL 中的 Group By 和 Sum 结果

标签 java hibernate jakarta-ee hql

CREATE TABLE project(
    Id int auto_increment primary key,
    Name char(50) NOT NULL
)ENGINE = InnoDB;

CREATE TABLE car(
    Id int auto_increment primary key,
    ProjectId int(11) NOT NULL,
    Plate char(10) NOT NULL,
    Latitude varchar(50) DEFAULT '-6.221165',
    Longitude varchar(50) DEFAULT '106.833286',
    LastTemp varchar(20) DEFAULT '0',
    LastSpeed varchar(20) DEFAULT '0',
    LastGap double DEFAULT 0,
    Mileage double DEFAULT 0,
    CONSTRAINT fk_car_project FOREIGN KEY(ProjectId)REFERENCES project(Id) ON UPDATE CASCADE
)ENGINE = InnoDB;

CREATE TABLE car_log(
    Id int auto_increment primary key,
    CarId int NOT NULL,
    Latitude varchar(50),
    Longitude varchar(50),
    Temp varchar(20),
    Speed varchar(20),
    Gap double DEFAULT 0,
    LogDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_carlog_car FOREIGN KEY(CarId)REFERENCES car(Id) ON UPDATE CASCADE
 )

表car用于保存汽车数据,并具有来自表项目的外键。表car_log用于保存汽车的每一次 Action (日志)。我已经为每个表创建了对象。 在本例中,我想显示项目中每辆车的摘要(每天的差距总和)。 这是我想选择项目 1 中每辆车的摘要时的查询

select CarId, DATE(LogDate) dateOnly, sum(Gap)/1000 KM from car_log where CarId IN (SELECT Id FROM car where ProjectId = 1) group by CarId, dateOnly;

但是我很困惑如何在 HQL 中处理这个问题。我尝试创建新对象来处理这个问题,但使用它时感到困惑。我想问一下这个问题怎么解决

public class CarLogDate {
    private double km;
    private Date date;
    //constructor & setter getter
}

最佳答案

在查询中,只需将表名称替换为实体名称,将表列名称替换为实体属性。

List<Object[]> list = 
    select CarId, LogDate dateOnly, sum(Gap)/1000 KM
    from CarLogDate
    where CarId IN
        (SELECT Id FROM car where ProjectId = 1)
    group by CarId, dateOnly;

关于java - HQL 中的 Group By 和 Sum 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15562685/

相关文章:

java - Android 开发 - 如何通过类传递 Drawables 和 Button?

java - openshift上的tomcat CATALINA_HOME环境变量问题

hibernate - 覆盖 OneToMany 关联中的延迟获取

jakarta-ee - 无法排除方法被 JAX-WS 作为 Web 服务操作公开

java - 仅在业务逻辑中设置对象的属性?

java - 带有自定义类加载器的 Jmockit : System class loader does not support adding JAR file to system class path during the live phase

java - 如何在 jvm 中创建超过 Integer.MAX_VALUE 的对象?

java - 使用@Formula hibernate ManyToOne

java - 带有 Spring 数据的 JPA

java - 在服务器上部署 Java Web 服务