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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

5回答

862閲覧

MySQLで日付ごとの集計が取りたい。

kokawa2003

総合スコア217

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/12/17 06:25

編集2018/12/17 12:34

MySQLにこのようなテーブルがあります。
mysql> select * from accessdates;
+----+--------+---------------------+
| id | userid | accessdate |
+----+--------+---------------------+
| 1 | 6 | 2018-12-15 11:05:23 |
| 2 | 6 | 2018-12-15 11:14:11 |
| 3 | 6 | 2018-12-15 11:14:13 |
| 4 | 6 | 2018-12-15 11:20:21 |
| 5 | 6 | 2018-12-15 20:30:59 |
| 6 | 6 | 2018-12-15 21:34:29 |
| 7 | 6 | 2018-12-15 12:37:44 |
| 8 | 6 | 2018-12-15 21:43:26 |
| 9 | 6 | 2018-12-15 21:43:55 |
| 10 | 6 | 2018-12-15 21:44:10 |
| 11 | 5 | 2018-12-15 21:45:38 |
| 12 | 5 | 2018-12-15 21:46:11 |
| 13 | 7 | 2018-12-16 12:23:24 |
| 14 | 7 | 2018-12-16 12:23:30 |
| 15 | 5 | 2018-12-16 13:45:14 |
| 16 | 5 | 2018-12-16 13:49:11 |
| 17 | 5 | 2018-12-16 13:49:39 |
| 18 | 5 | 2018-12-16 17:19:07 |
+----+--------+---------------------+
でこのテーブルから特定のユーザーIDのデータを取り出し、時間はカットして日付ごとの集計をしたいです。
例えば
USERID=5の人は
15日 2
16日 3
とかです。
そこで
SELECT userid,DATE_FORMAT(accessdate, '%Y-%m-%d') AS time, COUNT(*) AS count FROM accessdates where userid = 5 and GROUP BY DATE_FORMAT(accessdate, '%Y-%m-%d') ;
とか書いてみましたが
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY DATE_FORMAT(accessdate, '%Y-%m-%d')' at line 1
と怒られます。
なぜエラーなのかさっぱり分かりません。
お教えいただけるとありがたいです。

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

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

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

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

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

guest

回答5

0

ベストアンサー

where userid = 5 and GROUP BY DATE_FORMAT(accessdate, '%Y-%m-%d') ;
andが不要なのではないでしょうか。

投稿2018/12/17 06:29

madoka9393

総合スコア994

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

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

kokawa2003

2018/12/17 06:33

行けました。ありがとう。ございます。 SELECT userid,DATE_FORMAT(accessdate, '%Y-%m-%d') AS time, COUNT(*) AS count FROM accessdates where userid = 5 GROUP BY DATE_FORMAT(accessdate, '%Y-%m-%d') ; +--------+------------+-------+ | userid | time | count | +--------+------------+-------+ | 5 | 2018-12-15 | 2 | | 5 | 2018-12-16 | 4 | +--------+------------+-------+
guest

0

MySQLの場合、select句で付けた別名をつかってGORUP BY句で集計につかえます
GROUP BY userid,time 的な感じです
ただしわざわざ日付で集計してるのにtimeはないかなぁ・・・dateとかじゃないですかね?
なお他の方のご指摘もある通り別名はバックスラッシュで囲って下さい

投稿2018/12/17 06:57

yambejp

総合スコア117780

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

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

0

エラーの原因は、GROUP BYの前にandがあるせいだと思います。

あと、DATE_FORMAT(accessdate, '%Y-%m-%d') AS timeについて、timeは予約語(データ型)なので、エイリアスとして使うならバッククオートでくくった方がいいかと思います。

投稿2018/12/17 06:36

mks

総合スコア80

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

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

0

group by の前にandがあります。

省略せずに記述すると以下の様になります。

SQL

1SELECT userid,DATE_FORMAT(accessdate, '%Y-%m-%d') AS time, COUNT(*) AS count 2FROM accessdates 3where userid = 5 4GROUP BY userid, DATE_FORMAT(accessdate, '%Y-%m-%d')

投稿2018/12/17 06:34

sazi

総合スコア25430

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

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

0

よく考えたら、useridは出力にいらないので

SQL

1SELECT DATE_FORMAT(accessdate, '%Y-%m-%d') AS 'date', COUNT(*) AS 'count' FROM accessdates where userid = 5 GROUP BY userid, DATE_FORMAT(accessdate, '%Y-%m-%d');

+------------+-------+
| date | count |
+------------+-------+
| 2018-12-15 | 2 |
| 2018-12-16 | 4 |
+------------+-------+
2 rows in set (0.00 sec)
でいきます。
ありがとうございます。

投稿2018/12/17 07:34

kokawa2003

総合スコア217

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

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

sazi

2018/12/20 05:36 編集

>よく考えたら、useridは出力にいらないので それならgroup byも不要で SELECT DATE_FORMAT(accessdate, '%Y-%m-%d') AS 'date', COUNT(*) AS 'count' FROM accessdates where userid = 5 GROUP BY DATE_FORMAT(accessdate, '%Y-%m-%d'); ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問