1

提出された日付と数字を含むテーブルがあります。次のようなクエリを使用して、順序付けられた月名をグループ化フィールドとして表示したいと考えています。

SELECT 
  COALESCE(DATE_FORMAT(Day,'%M'), 'TOTAL') As Month,
  SUM(Money) As USD
FROM mytable
WHERE
  Day
    BETWEEN
      concat(date_format(now(),'%Y-'),'01-01')
    AND
      concat(date_format(now(),'%Y-'),'12-31')
GROUP BY
  DATE_FORMAT(Day,'%m') 
  WITH ROLLUP;

私は得る:

+----------+--------+
| Month    | USD    |
+----------+--------+
| January  |  103.5 |
| February | 119.25 |
| March    | 163.25 |
| April    |    102 |
| May      | 124.75 |
| June     |   72.5 |
| June     | 685.25 |
+----------+--------+

総計行に置換される NULL 値がないのはなぜですか?

4

1 に答える 1

2

問題は、GROUP BY 式が SELECT の式と同じでなければならないためNULL、TOTAL に反することです。クエリを書き直す必要があります。また、MySQL のキーワードおよび関数名と一致する名前を避けることをお勧めします (少なくともそれらを引用してください)。

SELECT
  COALESCE(ELT(m,
               'Jan', 'Feb', 'Mar', 'Apr',
               'May', 'Jun', 'Jul', 'Aug',
               'Sep', 'Oct', 'Nov', 'Dec'),
           'TOTAL') as `Month`,
  USD
FROM (
  SELECT 
    MONTH(`Day`) As m,
    SUM(Money) As USD
  FROM mytable
  WHERE
    `Day`
      BETWEEN
        MAKEDATE(YEAR(CURDATE()), 1)
      AND
        LAST_DAY(MAKEDATE(YEAR(CURDATE()), 365))
  GROUP BY
    MONTH(`Day`) 
    WITH ROLLUP) as sums
于 2012-01-11T08:02:51.567 に答える