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

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

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

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

SQL

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

Q&A

解決済

2回答

16424閲覧

MySQLでSELECTの結果を横並びに表示したい

aki89_s

総合スコア13

MySQL

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

SQL

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

0グッド

0クリップ

投稿2019/03/18 07:49

Mysql 5.6 で以下のようなテーブルがあるとして

dayuser_idprice
201903101100
201903102200
201903103300
201903111400
201903112500
201903113600
201903121700

これを
こんな感じに表示することってできますでしょうか?

dayuser_id1user_id2user_id3
20190310100200300
20190311400500600
2019031270000
累計1200700900

下記のSQL文で理想に近しいものは出来ましたが、
priceが0x343422 の様な表記になってしまう事と、
user_idの数だけカラムを追加しなければならないのを何とかしたいです。
どなたかよろしくお願いします。

Mysql

1SELECT 2day, 3group_concat(if(t.user_id=1, n.price, null)) AS '1', 4group_concat(if(t.user_id=2, n.price, null)) AS '2', 5group_concat(if(t.user_id=3, n.price, null)) AS '3' 6FROM table AS t 7GROUP BY day 8UNION ALL 9SELECT 10'累計', 11SUM(CASE WHEN t2.user_id = 1 THEN t2.price ELSE 0 END) AS '1', 12SUM(CASE WHEN t2.user_id = 2 THEN t2.price ELSE 0 END) AS '2', 13SUM(CASE WHEN t2.user_id = 3 THEN t2.price ELSE 0 END) AS '3' 14FROM table AS t2;

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

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

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

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

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

guest

回答2

0

user_idの数だけカラムを追加しなければならないのを何とかしたいです。

それはテーブルのカラム名を変更しているのと同じ事ですから、MySQLに於いては、固定のSQLでは無理です。
要は、SQL文をデータの内容に合わせて動的に作り出す必要があるという事です。

ストアドで、動的SQLを作成するようにするか(だとしてもカラム名が可変になるようでは取得の際にエラーになります)、group_concatで取得して、取得した側でループ処理で分解する方法などになるでしょう。

投稿2019/03/18 09:38

編集2019/03/18 11:06
sazi

総合スコア25173

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

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

aki89_s

2019/03/18 11:31

ありがとうございます! そうなんですね!loopとかの組み合わせでいけるのかと思ってました。。。 勉強します!
guest

0

ベストアンサー

  • 元データ

SQL

1create table tbl (day date,user_id int,price int); 2insert into tbl values 3('2019-03-10',1,100), 4('2019-03-10',2,200), 5('2019-03-10',3,300), 6('2019-03-11',1,400), 7('2019-03-11',2,500), 8('2019-03-11',3,600), 9('2019-03-12',1,700);
  • 集計

SQL

1select coalesce(day,'累計') as day 2,sum(price*(user_id=1)) as user_id1 3,sum(price*(user_id=2)) as user_id2 4,sum(price*(user_id=3)) as user_id3 5from tbl 6group by day with rollup; 7

※一部調整

投稿2019/03/18 09:32

編集2019/03/18 09:35
yambejp

総合スコア114769

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

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

aki89_s

2019/03/18 11:37

ありがとうございます! coalesceとかrollupとか初耳でした! 頑張ります!勉強します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問