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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

3回答

1072閲覧

MySQL(MariaDB)での条件を絞り込んだ合計値のクエリ

Mcgregor

総合スコア31

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2018/12/29 14:11

編集2018/12/29 14:35

お世話になっております。
現在、クエリの書き方で悩んでおります。色々とネットで調べてみたのですが、いまいち自信の思っている解に辿り着かずお知恵をお貸しいただければと思っております。

やりたいこと
現在PHPである数値を集計するアプリを作成しているのですが、上手いクエリの書き方に悩んでおります。
まず以下の様なデータがあるとします。(こちらはサンプルデータです。)

testtable1
col1(varchar),col2(int(1)),col3(varchar)
Tanaka,1,AAA
Tanaka,3,AAA
Tanaka,4,AAA
Suzuki,1,AAA
Tanaka,5,BBB

上記のようなテーブル/データがあった場合に、次の様な結果を出したいと思っています。
「col1の"Tanaka"のみでcol2の結果を"0がn個、1がn個...."」という様に、0から9までの数字がそれぞれ何個あるかを取り出したいと思っています。しかし私が現在躓いているのは"Tanakaには4がない、Suzukiには6/7がない"というように、Tanakaで絞り且つ、col2にない数字も何らかしらの形(0でもNullでもよい)で結果として取り出したいのです。
私が実行したクエリは以下です。
SELECT COUNT(*) AS レコード数, col2
FROM testtable1
WHERE col1 = "Tanaka"
GROUP BY col2;

しかし、上記のクエリだと"col2に存在する番号のみを集計"してしまい、アプリ側で扱うのが複雑になってしまうため、できればクエリで対応したいと思っています。
結果として以下の様に取得したいと思っています。(数字は適当です)

レコード数,col2
0,1
1,10
2,1
3,0
4,0
5,0
6,0
7,0
8,1
9,1

上記のような結果を得られるクエリの書き方がございましたらご教示をお願いいたします。

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

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

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

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

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

guest

回答3

0

こんな漢字で、

SQL

1SELECT 2 n.i AS col2 3 ,COUNT(*) AS "レコード数" 4FROM 5 (SELECT @i := @i + 1 AS i FROM any_table, (SELECT @i := -1) n LIMIT 10) n 6 LEFT JOIN testtable1 t ON n.i = t.col2 7WHERE 8 t.col1 = 'Tanaka' 9GROUP BY 10 n.i 11;

any_tableには、レコードが10件以上ある適当なテーブルを指定して下さい。

投稿2018/12/29 16:50

編集2018/12/29 16:53
hichon

総合スコア5737

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

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

Mcgregor

2019/01/07 13:50

返信が遅くなってしまい大変申し訳ございません。 あけましておめでとうございます。 試したところ、思った通りに表示が行われました。 とても参考になる回答、ありがとうございます。
guest

0

MariaDB 10.1 以降なら、これでいけるはず。Sequence Storage Engine

sql

1select seq, count(col2) 2from 3 (select col2 from testtable1 where col1 = 'Tanaka') t 4 right join (select seq from seq_0_to_9) s on t.col2 = s.seq 5group by seq 6;

投稿2018/12/29 16:17

編集2018/12/29 22:29
shozi3

総合スコア691

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

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

Mcgregor

2019/01/07 13:52

返信が遅くなってしまい大変申し訳ございません。 あけましておめでとうございます。 試したところ、希望通りの結果が返ってきました。 今後の参考にさせていただきます。 ありがとうございます。
guest

0

ベストアンサー

以下参考
MySQL(MariaDB)でPostgreSQLのgenerate_seriesっぽいことをする

コストは下がる上がるかもしれませんが、unionを使っても一応可能だと思います。

SQL

1select 0 as value, count(*) from testtable1 WHERE col1='Tanaka' and col2=0 2union all 3select 1 as value, count(*) from testtable1 WHERE col1='Tanaka' and col2=1 4567union all 8select 9 as value, count(*) from testtable1 WHERE col1='Tanaka' and col2=9

投稿2018/12/29 15:55

編集2019/01/07 17:33
sazi

総合スコア25138

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

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

Mcgregor

2019/01/07 13:59

返信が遅くなってしまい大変申し訳ございません。 あけましておめでとうございます。 コストが下がるとありましたが、今のところは特にそのような感じはありませんでした。 他のご回答者様と同様に結果が表示されました。 今回、こちらをベストアンサーとさせていただきます。 理由といたしましては、非常に個人のスキルに依存するものではありますが、 他のご回答者様のクエリより私が理解できたというのが理由となります。 PHPでプレースホルダを利用しているのですが、私のスキル不足で記述ができる限り、 現状のスキルで理解し易いようにしたいと思っておりました。 unionで繋ぐだけであれば、パッと見てもすぐにわかるので冗長ではありますが、 後で見返した際にすぐに理解できると思ったからです。 冗長ではあるかもしれませんが、シンプルでしたのでベストアンサーとさせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問