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
有什么意义?是怎么做的,我没有一个好的方式来质疑吗?你有什么是好的。我只是习惯于限定查询中的所有列引用,即使只有一个表被引用。在引用多个表的查询中,最佳实践是限定查询中的所有列引用,这只是一种非常熟悉的模式,我总是这样做,即使只有一个表被引用。实际上我只是在练习查询。我没有使用任何其他的网络代码。谢谢你!