我有以下数据库表:
+----------+----------+---------+-----------+------------+-----------+
| animalID | foodtype | rAmount | rAmtUnits | rFrequency | rFreqUnit |
+----------+----------+---------+-----------+------------+-----------+
| 3498 | BANA | 3 | lbs. | 1 | day |
| 3455 | NUTS | 10 | lbs. | 1 | day |
| 3455 | VEGG | 20 | lbs. | 1 | day |
| 3450 | NUTS | 10 | lbs. | 1 | day |
| 3450 | VEGG | 20 | lbs. | 1 | day |
| 3450 | HAY | 100 | lbs. | 1 | day |
| 3452 | HAY | 100 | lbs. | 1 | day |
| 3452 | NUTS | 10 | lbs. | 1 | day |
| 3452 | VEGG | 20 | lbs. | 1 | day |
| 9490 | BEFR | 2 | lbs. | 1 | day |
| 2899 | BEFR | 2 | lbs. | 1 | day |
| 8393 | ANTS | 10 | ltr. | 1 | day |
| 8899 | EUCL | 5 | lbs. | 1 | day |
| 4883 | FISH | 4 | lbs. | 1 | day |
| 7838 | MICE | 3 | ea. | 1 | wk. |
| 7838 | RATS | 1 | ea. | 2 | wk. |
| 4884 | WPLN | 3 | lbs. | 1 | wk. |
| 1863 | BEFR | 3 | lbs. | 1 | day |
| 2847 | EUCL | 3 | lbs. | 1 | day |
| 4336 | BANA | 2 | lbs. | 1 | day |
| 4336 | NUTS | 1 | lbs. | 1 | day |
| 4336 | CHWM | 2 | cups | 1 | day |
| 2856 | CHWM | 2 | cups | 1 | day |
| 2856 | BANA | 1 | lbs. | 1 | day |
| 2856 | NUTS | 2 | lbs. | 1 | day |
| 8483 | NUTS | 2 | cups | 1 | day |
| 8483 | SEED | 2 | cups | 1 | day |
+----------+----------+---------+-----------+------------+-----------+我想列出一周所需的食物数量和数量。我有以下查询:
SELECT foodtype,
CASE
WHEN rFrequency=1 AND rFreqUnit='day' THEN rAmount*7
WHEN rFrequency=2 AND rFreqUnit='wk.' THEN rAmount/2
ELSE rAmount END AS rAmount, rAmtUnits
FROM Rations GROUP BY foodtype;但是,对于GROUP,rAmount列没有进行汇总,大多数值就会消失。我正在寻找一种方法,这样组将总结所有的价值,将在那里,没有小组的。有什么简单的方法吗?
发布于 2014-04-08 22:36:28
看起来,您想要将返回rAmount的表达式包装为一个总和。
看起来你不想把“磅”和“盎司”加在一起,所以看起来你也想用rAmtUnits来“分组”。
考虑到表中的数据,无论rFreqUnit是哪一天,您似乎都希望将数据乘以7。我一点也不清楚你想把什么除以2,如果rFrequency被设置为2,似乎如果你每周需要两次,你就需要rAmount的两倍。如果你每周需要一些"N",你会想把"N * rAmount"包括在总数中。同样,如果您每天需要3件东西,您需要将"3 * rAmount * 7"包括在总数中。
我想你想要这样的东西:
SELECT r.foodtype
, SUM(r.rAmount * r.rFrequency * IF(r.rFreqUnit='day',7,1)
) AS rAmount
, r.rAmtUnits
FROM Rations r
GROUP BY r.foodtype, r.rAmtUnits与表达式"IF(r.rFreqUnit='day',7,1)"等效的ANSI标准是:
CASE r.rFreqUnit WHEN 'day' THEN 7 ELSE 1 END发布于 2014-04-08 22:31:33
不如:
FROM Rations WHERE foodtype = FoodType把它放在一个函数中(例如javascript,php.)将FoodType作为参数发送到
https://stackoverflow.com/questions/22949390
复制相似问题