1

私はこのクエリで頭がいっぱいです。次のような表があります(簡略化):

Date         Weight kg
-------------------
2012-04-16     12.4
2012-04-17      9.6
2012-04-16      5.4
2012-04-18      2.8
2012-04-16      4.5
...             ...

クエリで次の結果が返されるようにします。

Week.no.  <3kg  3-7kg   >7kg
----------------------------
16         2.8    9.9   22.0
...        ...    ...   ....

これは私がこれまでに持っているものです:

SELECT *, CONCAT(WEEK(`Date`)) AS Week, SUM(`Weight`) AS TotalWeight,
   (SELECT SUM(`Weight`) FROM tbl_fangster WHERE `Weight` < 3 AND
   `Date` >= '2012-04-01 00:00:00' AND `Date` <= '2012-04-30 00:00:00'
   AND `Species` = 'Salmon' ) AS SumSmall
FROM tbl_fangster
WHERE `Date` >= '2012-04-01 00:00:00'
AND `Date` <= '2012-04-30 00:00:00'
AND `Species` = 'Salmon'
GROUP BY CONCAT(WEEK(`Date`))

ただし、SumSmall は各行で同じ数値を返します。つまり、各週の SumSmall ではなく合計 SumSmall を返します。GROUP 句をサブクエリにコピーペーストしようとしましたが、うまくいきませんでした。

4

1 に答える 1

3

CASE ステートメントを使用して、さまざまな条件を処理します。

SELECT *, CONCAT(WEEK(`Date`)) AS Week, SUM(`Weight`) AS TotalWeight,
       SUM(CASE WHEN Weight < 3 THEN Weight ELSE 0 END) AS SumSmall,
       SUM(CASE WHEN Weight >= 3 AND Weight <= 7 THEN Weight ELSE 0 END) AS SumMedium,
       SUM(CASE WHEN Weight > 7 THEN Weight ELSE 0 END) AS SumLarge
FROM tbl_fangster
WHERE `Date` >= '2012-04-01 00:00:00'
AND `Date` <= '2012-04-30 00:00:00'
AND `Species` = 'Salmon'
GROUP BY CONCAT(WEEK(`Date`))
于 2012-04-16T18:51:18.530 に答える