質問したいこと
降順の並び替え(ORDER BY col_name DESC)や、順位の制限(LIMIT)は、
同一カラム内のデータの抽出方法に限られるのですか?
カラム1、カラム2、カラム3を並び替えたり、順位の制限をつけることはできないのでしょうか?
調べ方が下手で躓いております。
お手数ですが、ご回答の程よろしくお願いいたします。
実現したいこと
下記のように、scoreテーブルに1ヶ月分のA,B,C,D,Eのデータがある。
日付 | A | B | C | D | E |
---|---|---|---|---|---|
2022-01-01 | 30 | 40 | 50 | 10 | 20 |
2022-01-02 | 40 | 45 | 55 | 15 | |
2022-01-03 | 45 | 40 | 50 | 20 | 15 |
... | ... | ... | ... | ... | ... |
2022-01-31 | 50 | 40 | 35 | 20 | 20 |
上記データを下記のように、カラムごとに一月分の合計を出し、
値の多い順に3番目まで出力したい。
日付 | C | B | A |
---|---|---|---|
2022-01 | 1500 | 1200 | 900 |
php
1//理想 2 array(4) { 3 ["DATE_FORMAT(date, '%Y-%m')"]=> string(7) "2022-01" 4 ["C"]=> string(4) "1500" 5 ["B"]=> string(4) "1200" 6 ["A"]=> string(3) "900" 7}
試したこと
月毎の合計を出すところまで
php
1$sql = "SELECT DATE_FORMAT(date, '%Y-%m'), 2 SUM(COALESCE(A,0)) , 3 SUM(COALESCE(B,0)) , 4 SUM(COALESCE(C,0)) , 5 SUM(COALESCE(D,0)) , 6 SUM(COALESCE(E,0)) , 7 FROM score 8 GROUP BY DATE_FORMAT(date, '%Y-%m')=DATE_FORMAT(2022-01-01, '%Y-%m')"; 9 10//下記のように出力される 11 array(6) { 12 ["DATE_FORMAT(date, '%Y-%m')"]=> string(7) "2022-01" 13 ["A"]=> string(3) "900" 14 ["B"]=> string(4) "1200" 15 ["C"]=> string(4) "1500" 16 ["D"]=> string(3) "600" 17 ["E"]=> string(3) "600" 18}
バージョン
PHP Version 7.2.24
参考にしたサイト
https://dev.mysql.com/doc/refman/5.6/ja/limit-optimization.html
https://dev.mysql.com/doc/refman/5.6/ja/order-by-optimization.html

回答1件
あなたの回答
tips
プレビュー