- 締切済み
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 このようなテーブルにする方法を教えてください
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【ちょいと厳しい指摘だったかも】と反省して 要は、 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文一発だから。まあ、ちょいと厳しい指摘は、その真意を理解されて・・・
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)