sql >> データベース >  >> RDS >> Mysql

Mysql ...不可能なクエリ?

    不可能ではなく、ただ複雑です。 を使用できますSTR_TO_DATE 文字列をDATETIMEに変換します オブジェクト。そこから MONTH 月番号を取得します。ただし、(@ DRappがコメントしたように)DATETIMEを保存する必要があることに注意してください。 VARCHARではなく、ネイティブ形式の値 、その後、STR_TO_DATEを処理する必要はありません。 。月番号を取得したら、条件付き集計を使用して、必要な結果を取得できます。

    SELECT name,
           COALESCE(AVG(CASE WHEN mth = 1 THEN PTS END), 0) AS Jan,
           COALESCE(AVG(CASE WHEN mth = 2 THEN PTS END), 0) AS Feb,
           COALESCE(AVG(CASE WHEN mth = 3 THEN PTS END), 0) AS Mar,
           COALESCE(AVG(CASE WHEN mth = 4 THEN PTS END), 0) AS Apr,
           -- repeat for May to November
           COALESCE(AVG(CASE WHEN mth = 12 THEN PTS END), 0) AS `Dec`,
           AVG(PTS) AS AVG
    FROM (
      SELECT name, PTS AS PTS, MONTH(STR_TO_DATE(DATE, '%a %b %e %H:%i:%s %Y')) AS mth
      FROM data
    ) d
    GROUP BY name
    

    出力(サンプルデータ用):

    name    Jan     Feb     Mar     Apr     Dec     AVG
    Chris   0       4       0       2       0       3
    John    0       0       0       2.6667  0       2.6667
    

    SQLFiddleのデモ




    1. テーブルの最初の行の削除を防ぐ方法(PostgreSQL)?

    2. cronjobとして機能するPHPループ[実行中のインスタンスが1つだけであることを確認してください]

    3. Oracle JDeveloperでのJavaアプリケーションの作成、パート2

    4. Oracle SQL WHERE句で(+)記号はどういう意味ですか?