mysql いろんな条件
mysql いろんな条件
下記のようなテーブルより
table1
3,60,,,,,テスト1,科目A
4,59,,,,,テスト1,科目B
3,60,,,,,テスト1,科目A
1,80,,,,,テスト1,科目B
3,60,,,,,テスト1,科目A
4,59,,,,,テスト1,科目B
5,23,,,,,テスト1,科目A
5,23,,,,,テスト1,科目B
7,13,,,,,テスト1,科目A
table2
1,80,,,,,テスト1,科目B
3,60,,,,,テスト2,科目A
4,59,,,,,テスト2,科目B
3,60,,,,,テスト2,科目A
1,80,,,,,テスト2,科目B
3,60,,,,,テスト2,科目A
4,59,,,,,テスト2,科目B
5,23,,,,,テスト2,科目A
5,23,,,,,テスト2,科目B
7,13,,,,,テスト2,科目A
1,80,,,,,テスト2,科目B
↓
結果1
テスト1,2,0,3,5
テスト2,2,0,3,5
結果2
科目A,0,0,6,4
科目B,4,0,0,6
現在
select count(*) from table1
where col7 = 'テスト1' and col1 = 1
select count(*) from table1
where col7 = 'テスト1' and col1 = 2
select count(*) from table1
where col7 = 'テスト1' and col1 = 3
select count(*) from table1
where col7 = 'テスト1' and col1 >3
このように1つ1つできていているのですが、
まとめてできる方法を知らないです。
また、1つずつやるとその分時間がかかります。
さらに1つのテーブルのみでしかやり方を知りません。
上記のようなテーブルから
結果1
テスト1,2,0,3,5
テスト2,2,0,3,5
結果2
科目A,0,0,6,4
科目B,4,0,0,6
このようなテーブルにする方法を教えてください
投稿日時 - 2019-03-06 17:33:09
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(3)
【ちょいと厳しい指摘だったかも】と反省して
要は、
1、table1で、テスト1という名目で、(col7 = 'テスト1' and col1 = 1)が成立する総数、(col7 = 'テスト1' and col1 = 2)が成立する総数、(col7 = 'テスト1' and col1 = 3)が成立する総数、(col7 = 'テスト1' and col1 > 3)が成立する総数を求めたい。
2、table2で、テスト2という名目で、(col7 = 'テスト2' and col1 = 1)が成立する総数、(col7 = 'テスト2' and col1 = 2)が成立する総数、(col7 = 'テスト2' and col1 = 3)が成立する総数、(col7 = 'テスト2' and col1 > 3)が成立する総数を求めたい。
3、1と2を一つのSQL文で求めたい。
と、考え方を整理してもらうのが、先の指摘の目的。で、ここまで書いたら、もはや書くべきSQL文は見えてきたと思いますよ。
SELECT
"テスト1" AS テスト名,
SUM(ABS([テスト名]='テスト1' And [番号]=1)) AS 1,
SUM(ABS([テスト名]='テスト1' And [番号]=2)) AS 2,
Sum(ABS([テスト名]='テスト1' And [番号]=3)) AS 3,
Sum(ABS([テスト名]='テスト1' And [番号]>3)) AS 4
FROM table1
UNION
SELECT
"テスト2" AS テスト名,
SUM(ABS([テスト名]='テスト2' And [番号]=1)) AS 1,
SUM(ABS([テスト名]='テスト2' And [番号]=2)) AS 2,
Sum(ABS([テスト名]='テスト2' And [番号]=3)) AS 3,
Sum(ABS([テスト名]='テスト2' And [番号]>3)) AS 4
FROM table2;
>上記のようなテーブルにするには?
それは、無用。だって、SQL文一発だから。まあ、ちょいと厳しい指摘は、その真意を理解されて・・・
投稿日時 - 2019-03-06 19:57:06