try agg()
function:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0,5,size=(20, 3)), columns=list('ABC'))
print(df)
print(df.groupby('C').agg({'A': max, 'B':min}))
Выход:
A B C
0 2 3 0
1 2 2 1
2 4 0 1
3 0 1 4
4 3 3 2
5 0 4 3
6 2 4 2
7 3 4 0
8 4 2 2
9 3 2 1
10 2 3 1
11 4 1 0
12 4 3 2
13 0 0 1
14 3 1 1
15 4 1 1
16 0 0 0
17 4 0 1
18 3 4 0
19 0 2 4
A B
C
0 4 0
1 4 0
2 4 2
3 0 4
4 0 1
В качестве альтернативы вы можете проверить функцию pandas.read_sql_query () ...
Я могу видеть Ваш Пользовательский класс? Это просто использует ограничения ниже. Я не вижу, почему Ограничения действительно несколько отличались бы, чем Примеры (я думаю, что пустые поля проигнорированы по умолчанию в примерах хотя).
getCurrentSession().createCriteria(User.class)
.setProjection( Projections.distinct( Projections.projectionList()
.add( Projections.property("name"), "name")
.add( Projections.property("city"), "city")))
.add( Restrictions.eq("city", "TEST")))
.setResultTransformer(Transformers.aliasToBean(User.class))
.list();
я никогда не использовал alaistToBean, но я просто читал об этом. Вы могли также просто циклично выполниться по результатам..
List<Object> rows = criteria.list();
for(Object r: rows){
Object[] row = (Object[]) r;
Type t = ((<Type>) row[0]);
}
, Если Вы имеете Вам, может вручную заполнить Пользователя самим тот путь.
Его вид трудно для изучения проблемы еще без некоторой информации для диагностирования проблемы.
Проблема возникает, когда у вас есть псевдоним, имя которого совпадает с именем свойства objects. Hibernate, похоже, подбирает псевдоним и использует его в sql. Я нашел это задокументированное здесь и здесь , и я считаю, что это ошибка в Hibernate, хотя я не уверен, что команда Hibernate с этим согласна.
В любом случае, я нашел простое решение, которое работает в моем случае. Ваш пробег может отличаться. Подробности ниже. Я попытался упростить код для этого примера, поэтому приношу свои извинения за любые ошибки или опечатки:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("sectionHeader", sectionHeaderVar)) // <- Problem!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Произойдет такой sql:
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(y1_) like ? )
Что вызывало ошибку: java.sql.SQLException: ORA -00904: «Y1_»: недопустимый идентификатор
Но когда я изменил свое ограничение на использование «this», например:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("this.sectionHeader", sectionHeaderVar)) // <- Problem Solved!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Получился следующий sql-файл, и моя проблема была решена.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(this_.SECTION_HEADER) like ? )
Вот оно! Довольно простое решение болезненной проблемы. Я не знаю, как это исправление отразится на проблеме запроса на примере, но оно может приблизить вас.
Я нашел простой способ, который работает в моем случае. Ваш пробег может отличаться. Подробности ниже. Я попытался упростить код для этого примера, поэтому приношу свои извинения за любые ошибки или опечатки:Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("sectionHeader", sectionHeaderVar)) // <- Problem!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Произойдет такой sql:
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(y1_) like ? )
Что вызывало ошибку: java.sql.SQLException: ORA -00904: «Y1_»: недопустимый идентификатор
Но когда я изменил свое ограничение на использование «this», например:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("this.sectionHeader", sectionHeaderVar)) // <- Problem Solved!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Получился следующий sql-файл, и моя проблема была решена.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(this_.SECTION_HEADER) like ? )
Вот оно! Довольно простое решение болезненной проблемы. Я не знаю, как это исправление отразится на проблеме запроса на примере, но оно может приблизить вас.
Я нашел простой способ, который работает в моем случае. Ваш пробег может отличаться. Подробности ниже. Я попытался упростить код для этого примера, поэтому приношу свои извинения за любые ошибки или опечатки:Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("sectionHeader", sectionHeaderVar)) // <- Problem!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Произойдет такой sql:
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(y1_) like ? )
Что вызывало ошибку: java.sql.SQLException: ORA -00904: «Y1_»: недопустимый идентификатор
Но когда я изменил свое ограничение на использование «this», например:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("this.sectionHeader", sectionHeaderVar)) // <- Problem Solved!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Получился следующий sql-файл, и моя проблема была решена.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(this_.SECTION_HEADER) like ? )
Вот оно! Довольно простое решение болезненной проблемы. Я не знаю, как это исправление отразится на проблеме запроса на примере, но оно может приблизить вас.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(y1_) like ? )
Что вызывало ошибку: java.sql.SQLException: ORA-00904: «Y1_»: недопустимый идентификатор
Но когда я изменил свое ограничение на использование «this», например:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("this.sectionHeader", sectionHeaderVar)) // <- Problem Solved!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Он произвел следующий sql, и моя проблема была решена.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(this_.SECTION_HEADER) like ? )
Вот и все! Довольно простое решение болезненной проблемы. Я не знаю, как это исправление отразится на проблеме запроса на примере, но оно может приблизить вас.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(y1_) like ? )
Что вызывало ошибку: java.sql.SQLException: ORA-00904: «Y1_»: недопустимый идентификатор
Но когда я изменил свое ограничение на использование «this», например:
Criteria criteria = session.createCriteria(MyClass.class)
.setProjection(Projections.projectionList()
.add(Projections.property("sectionHeader"), "sectionHeader")
.add(Projections.property("subSectionHeader"), "subSectionHeader")
.add(Projections.property("sectionNumber"), "sectionNumber"))
.add(Restrictions.ilike("this.sectionHeader", sectionHeaderVar)) // <- Problem Solved!
.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
Он произвел следующий sql, и моя проблема была решена.
select
this_.SECTION_HEADER as y1_,
this_.SUB_SECTION_HEADER as y2_,
this_.SECTION_NUMBER as y3_,
from
MY_TABLE this_
where
( lower(this_.SECTION_HEADER) like ? )
Вот и все! Довольно простое решение болезненной проблемы. Я не знаю, как это исправление отразится на проблеме запроса на примере, но оно может приблизить вас.
У меня аналогичная проблема. Я использую запрос по примеру и хочу отсортировать результаты по настраиваемому полю. В SQL я бы сделал что-то вроде:
select pageNo, abs(pageNo - 434) as diff
from relA
where year = 2009
order by diff
Он отлично работает без предложения order-by. Я получил
Criteria crit = getSession().createCriteria(Entity.class);
crit.add(exampleObject);
ProjectionList pl = Projections.projectionList();
pl.add( Projections.property("id") );
pl.add(Projections.sqlProjection("abs(`pageNo`-"+pageNo+") as diff", new String[] {"diff"}, types ));
crit.setProjection(pl);
. Но когда я добавляю
crit.addOrder(Order.asc("diff"));
, я получаю исключение org.hibernate.QueryException: не удалось разрешить свойство: diff исключение. Обходной путь с , этот также не работает.
PS: так как я не смог найти какой-либо подробной документации по использованию QBE для Hibernate, все вышеперечисленное - в основном метод проб и ошибок