У меня есть немного сложный (мне) SQL-запрос.
Мне нужно засчитывать все записи между часами с 14:00 до 16:00:00 в месяц и для этого нужно извлечь час из метки времени в поле. Я практикую заявление SQL с pgadmin3 Postgre перед применением программы JavaSQL возвращает сумму поля count. Не разрешит мне удалить GroupBy
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);
Это подводит меня Jan результаты в query..I просто хочу на сумму
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) Причина, заключающаяся в том, что im использует метод Java для возврата записей чисел между указанными временами, перечисленными по месяцам.
[мес представляет собой массив имен месяц]
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'oclock), но не может достигнуть часов 14 или 15 с этим методом в заявлении печати.
Я немного застрял, так как все, что я, похоже, выполняю в инструкции SQL, испортит его и просто не понравится (я пробовал несколько вложенных утверждений, и это просто было поражено и пропущено). Это первый раз, когда я работал с SQL и Java, поэтому совет по структурированию как метода Java, так и оператора SQL будет оценен
он не подведет меня, я попытался – Boo
, если именно поэтому им получать проголосовали down..its действительно не очевидно – Boo
ОШИБКА: ОШИБКА: колонка «trips.tpep_pickup_datetime» должен появиться в предложении GROUP BY или использоваться в агрегатной функции LINE 2: экстракт (час от trip.tpep_pickup_datetime) в час, ^ ********** Ошибка ********** ОШИБКА: столбец «trip.tpep_pickup_datetime» должен появиться в предложении GROUP BY или использоваться в агрегированной функции SQL state: 42803 Персонаж: 31 – Boo