質問したいこと
降順の並び替え(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
//理想 array(4) { ["DATE_FORMAT(date, '%Y-%m')"]=> string(7) "2022-01" ["C"]=> string(4) "1500" ["B"]=> string(4) "1200" ["A"]=> string(3) "900" }
試したこと
月毎の合計を出すところまで
php
$sql = "SELECT DATE_FORMAT(date, '%Y-%m'), SUM(COALESCE(A,0)) , SUM(COALESCE(B,0)) , SUM(COALESCE(C,0)) , SUM(COALESCE(D,0)) , SUM(COALESCE(E,0)) , FROM score GROUP BY DATE_FORMAT(date, '%Y-%m')=DATE_FORMAT(2022-01-01, '%Y-%m')"; //下記のように出力される array(6) { ["DATE_FORMAT(date, '%Y-%m')"]=> string(7) "2022-01" ["A"]=> string(3) "900" ["B"]=> string(4) "1200" ["C"]=> string(4) "1500" ["D"]=> string(3) "600" ["E"]=> string(3) "600" }
バージョン
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
まだ回答がついていません
会員登録して回答してみよう