gpt4 book ai didi

java - SQL 返回计数字段的总和。不允许我删除 GroupBy

转载 作者:行者123 更新时间:2023-12-01 09:54:26 24 4
gpt4 key购买 nike

我有一点复杂的(对我来说)SQL 查询。
我需要计算每月 14:00:00 到 16:00:00 之间的所有记录,并且必须从字段内的时间戳中提取小时才能执行此操作。在应用到Java程序之前我一直在用PGAdmin3 Postgre练习SQL语句

   SELECT
extract(hour from trips.tpep_pickup_datetime) AS hour,
count(*) AS aCount
FROM
trips

where

extract(hour from trips.tpep_pickup_datetime) >=14 and

extract(hour from trips.tpep_pickup_datetime) <=16 and

month ='Jan'

group by
1,extract(month from trips.tpep_pickup_datetime);

这给我带来了查询中的一月结果..我只想要总和

    hour  |  aCount
-----------------------
16 | 16111
14 | 13301
15 | 14796

!!!更新!!!是的:我曾尝试删除该组,但收到错误消息

    ERROR:  column "trips.tpep_pickup_datetime" must appear in the GROUP BY clause or be used in an aggregate function
LINE 2: extract(hour from trips.tpep_pickup_datetime) as hour,
^
********** Error **********

ERROR: column "trips.tpep_pickup_datetime" must appear in the GROUP BY clause or be used in an aggregate function
SQL state: 42803
Character: 31

我实际上需要返回的总和,而不是分割。 (44,208)原因是我使用Java方法返回按月列出的给定时间之间的记录数。

[第 mnth 是月份名称的数组]

private void conRecTime(int time1, int time2) {
String mnth;
try {
Statement stat1 = conn.createStatement();
ResultSet rs1;
for (int i = 0; i < monthsArr.length; i++) {
mnth = monthsArr[i];

rs1 = stat1.executeQuery(
"SELECT "
+ "extract(hour FROM trips.tpep_pickup_datetime)AS hour,"
+ "count(*) AS COUNT "
+ "FROM trips "
+ "WHERE "
+ "extract(hour from trips.tpep_pickup_datetime) >="+ time1
+ "AND extract(hour from trips.tpep_pickup_datetime) <="+ time2
+ "AND month ='"+ mnth + "'"
+ "GROUP BY 1,extract(month from trips.tpep_pickup_datetime);");
rs1.next();
count = rs1.getInt(2);

System.out.println("Count of records of " + mnth + " between the times " + time1 + " and " + time2 + " is " + count + " records" );
}
} catch (SQLException e) {
e.printStackTrace();
}
}

它只是读取每个月的第一行,即 16 小时(4 点),但我无法在 print 语句中使用该方法读取 14 或 15 小时。

我有点卡住了,因为我似乎对 SQL 语句执行的任何操作都会把它弄乱并且只是不喜欢它(我尝试了一些嵌套语句,但它只是时好时坏)。这是我第一次使用 SQL 和 Java,因此我们将不胜感激有关如何构建 Java 方法或 SQL 语句的建议

最佳答案

如果您不需要分割,只需放弃 group by 子句,并从 SELECT 列表中删除除计数之外的所有内容:

SELECT COUNT(*)  AS aCount
FROM trips
WHERE EXTRACT(HOUR FROM trips.tpep_pickup_datetime) >= 14 AND
EXTRACT(HOUR FROM trips.tpep_pickup_datetime) <= 16 AND
month = 'Jan'

关于java - SQL 返回计数字段的总和。不允许我删除 GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37356982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com