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

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

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

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

Q&A

解決済

1回答

2351閲覧

SQLでの複合条件での集計について

enigumalu

総合スコア192

SQL

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

0グッド

0クリップ

投稿2017/01/27 04:56

編集2017/01/27 05:35

いま月ごとに3回以上エントリーしたユーザがどれほどいるか画面を作成してみようと思っているのですが、sqlのGROUP BYとHAVINGを使用したら複合条件なので月とユーザ2つで絞られてしまい困っています
1つのsqlでorでの絞り込み集計はできますでしょうか?
下記で試して絞られてしまいました

select id as 'ID', DATE_FORMAT(rest_date, "%Y%m"), count(id) as '回数' from ent.test_rest where id is not null and '2017-01-01 00:00:00' < up_date and up_date < '2017-01-31 23:59:59' GROUP BY id,DATE_FORMAT(rest_date, "%Y%m") HAVING count(id) >= 3

ほしい結果例
id,入力月,入力回数
a111,201609,4
a111,201610,3
a111,201611,3
a111,201612,7
a222,201612,5
a222,201701,9

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

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

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

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

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

kunai

2017/01/27 05:19

ちょっとやりたい事がわかりません。具体的に「こういうデータがあって」「こういう出力がしたい」という感じでご提示いただけませんか。
enigumalu

2017/01/27 05:33 編集

すいません追記します
guest

回答1

0

ベストアンサー

CentOS7 MySQL 5.7.17の環境で試してみました。
普通に出来ているように思えますが、どうなんでしょうか。

pididrest_dateup_date
1512016-09-01 00:00:002017-01-01 00:00:01
1612016-09-02 00:00:002017-01-02 00:00:01
1712016-09-13 00:00:002017-01-03 00:00:01
1822016-09-01 00:00:002017-01-04 00:00:01
1922016-09-02 00:00:002017-01-05 00:00:01
2022016-09-03 00:00:002017-01-06 00:00:01
2132016-09-04 00:00:002017-01-07 00:00:01
2232016-09-05 00:00:002017-01-08 00:00:01
2342016-09-06 00:00:002017-01-09 00:00:01
242016-09-07 00:00:002017-01-10 00:00:01
2512016-10-01 00:00:002017-02-10 00:00:01
2612016-10-02 00:00:002017-02-10 00:00:02
2712016-10-03 00:00:002017-02-10 00:00:03
2842016-10-04 00:00:002017-02-10 00:00:01
2942016-10-05 00:00:002017-02-10 00:00:02
3042016-10-06 00:00:002017-02-10 00:00:04
3112016-10-07 00:00:002017-01-04 00:00:03

SQL

1SELECT 2 id as ID, 3 DATE_FORMAT(rest_date, '%Y%m') month, 4 count(id) as count 5FROM 6 test.test_rest 7WHERE 8 id is not null and 9 '2017-01-01' <= up_date and 10 up_date < '2017-03-01' 11GROUP BY 12 ID, month 13HAVING 14 count >= 3 15;
idmonthcount
12016093
12016104
22016093
42016103

投稿2017/01/27 06:17

kunai

総合スコア5405

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

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

Panzer_vor

2017/01/29 07:56

超絶な横槍ですが、 GROUP BY句での列別名の利用は、MySQLとPostgreSQL以外はエラーとなる気がしますね。
enigumalu

2017/02/02 10:11

ありがとうございます自己完結していたとは。。。 列別名に関してもおっしゃるとおりですね!普段あまり使わないので注意して見ます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問