@GrabConfig(systemClassLoader=true) @Grab(group='postgresql', module='postgresql', version='9.1-901.jdbc4') @Grab(group='org.eobjects.metamodel', module='MetaModel-full', version='3.4.5') import org.eobjects.metamodel.* import org.eobjects.metamodel.query.* import groovy.sql.Sql /* 以下のようなテスト結果テーブルscoresからテスト(test_id)毎の点数(score)の 平均・件数・最大・最小・合計を求める。 CREATE TABLE scores ( test_id character varying(100) NOT NULL, student_id character varying(6) NOT NULL, score integer, CONSTRAINT pk_scores PRIMARY KEY (test_id , student_id ) ) */ def sql = Sql.newInstance( "jdbc:postgresql://localhost:5432/userdb", "postgres", "postgres", "org.postgresql.Driver") dc = DataContextFactory.createJdbcDataContext(sql.getConnection()) // テーブル(=シート)を指定 table = dc.getDefaultSchema().getTableByName("scores") colTestId = table.getColumnByName("test_id") colScore = table.getColumnByName("score") // テスト毎に集計結果を取得 query = dc.query().from(table) .select(colTestId) .and(FunctionType.AVG, colScore) .and(FunctionType.COUNT, colScore) .and(FunctionType.MAX, colScore) .and(FunctionType.MIN, colScore) .and(FunctionType.SUM, colScore) .groupBy(colTestId) .toQuery() // Queryの表示 println query.toString() // Queryの実行 ds = dc.executeQuery(query) for(row in ds){ // 集約結果を表示 println row.getValue(0) + ":AVG=" + row.getValue(1) + ":COUNT=" + row.getValue(2) + ":MAX=" + row.getValue(3) + ":MIN=" + row.getValue(4) + ":SUM=" + row.getValue(5) }
動作環境
groovy 2.1.7, JDK7 update40
0 件のコメント:
コメントを投稿