Mysql 分组方式和总金额

Mysql 分组方式和总金额,mysql,sql,Mysql,Sql,我有以下数据库表: +----------+----------+---------+-----------+------------+-----------+ | animalID | foodtype | rAmount | rAmtUnits | rFrequency | rFreqUnit | +----------+----------+---------+-----------+------------+-----------+ | 3498 | BANA |

我有以下数据库表:

+----------+----------+---------+-----------+------------+-----------+
| 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;
但使用GROUPBY时,rAmount列不会求和,大多数值都会消失。我正在寻找一种方法,这样GROUPBY将汇总所有没有GROUPBY的值。有什么简单的方法吗?

如何:

FROM Rations WHERE foodtype = FoodType

将其放入函数(例如javascript、php…)中,在函数中发送FoodType作为参数

,看起来您希望将返回rAmount的表达式包装为一个总和聚合

看起来你不想把“磅”和“盎司”加在一起,所以看起来你也想“分组”

根据表中的数据,无论何时rFreqUnit为day,看起来都需要乘以7。我一点也不清楚,如果射频频率设置为2,你想除以2的值是多少。似乎如果你一周需要两次东西,你就需要两倍的数量。如果你每周需要
“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

你需要用SUM()来聚合rAmount列是的,除以2是个错误。我误读了表格,因为它意味着每两周一只老鼠。不过,谢谢!这正是我需要的。还有,做
r
然后再做
r.foodtype
有什么意义?是怎么做的,我没有一个好的方式来质疑吗?你有什么是好的。我只是习惯于限定查询中的所有列引用,即使只有一个表被引用。在引用多个表的查询中,最佳实践是限定查询中的所有列引用,这只是一种非常熟悉的模式,我总是这样做,即使只有一个表被引用。实际上我只是在练习查询。我没有使用任何其他的网络代码。谢谢你!