質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

1739閲覧

SQLについての質問です

pro-poke5

総合スコア46

pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/02/13 08:07

編集2017/02/13 08:33

レコードのデータを月ごと、日ごとに集計して結果を表に出したいです。
レコードのカラムのひとつに日付データが入っています。
その日付をもとに月ごと、日ごとに集計したいです。
最終的には表として表示させたいです。

SQLをどのようにしたらいいかお助けください。

お願いいたします。

追記
説明不足ですみません。
DBサーバはpostgresです。
日付の形は、timestamp without time zoneです。
「2016-07-13 15:26:49.754672」といった形で表示されています。

表として表示というのは
1日(1か月)何件のデータがあるか見たいためそれを表に表示させたいと思っています。
とりあえず1日何件あるか集計するSQLを調べています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru666

2017/02/13 08:13

データベースによってやり方が異なります。また、扱っている日付型の作りでも異なります。使用しているデータベース、それから日付フィールドの型が日付型以外の場合、型情報と実際の保存データのサンプルを例示してください。
退会済みユーザー

退会済みユーザー

2017/02/13 08:13

DB サーバーは何ですか? 「表として表示」とは具体的に何を使ってどこに表示するのですか?
guest

回答3

0

ベストアンサー

PostgreSQLであれば、date_trunc(text, timestamp)関数で任意の精度に切り捨てることが出来るので、
date_trunc('day', timestamp '2001-02-16 20:38:40')は「2001-02-16」になりますし、
date_trunc('month', timestamp '2001-02-16 20:38:40')は「2001-02-01」になります。
これをgroup by句に加えれば、任意の精度に切り捨てて足し込んだり平均を取ったりできますね。
date_trunc()かけたあとでもtimestamp型を維持することに注意です。

date_part(text, timestamp)だと、任意の日付要素を抽出してdouble precision型を返します。
こちらでもgroup by句に使えます。

ちなみに、SELECT文のたびにこの手の精度丸め関数を使うのは
動くけど少々時間がかかりやすいです。
テーブル構造を変更できるなら、
抽出する粒度に合わせたグルーピング用データ(年とか月とか)もカラムに持たせて、
インデックスをかけると良いでしょう。

投稿2017/02/13 08:37

編集2017/02/14 11:25
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

月ごと、日ごとに集計して

という前提であれば、各レコードに集計月(たとえば2017年2月14日なら
「2017-02-01」)や集計日をレコードに埋め込むのが一番です

投稿2017/02/14 04:00

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

簡単ですが

sql

1create table testd (hiduke timestamp, suuryo int); 2 3-- Nen 4select to_char(hiduke,'YYYY') nen, sum(suuryo) from testd group by 1 order by 1; 5 6-- Tsuki 7select to_char(hiduke,'YYYYMM') tsuki, sum(suuryo) from testd group by 1 order by 1; 8 9-- Hi 10select to_char(hiduke,'YYYYMMDD') hi, sum(suuryo) from testd group by 1 order by 1; 11

投稿2017/02/13 08:34

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問