我有一份“星期日”“星期日”和“星期二”列的餐桌食物:
person onSunday onMonday onTuesday
1 Biscuits: Chocolates Biscuits Chocolates
2 Chocolates Biscuits Pi: chocolates
从这一套{饼干,巧克力,馅饼},
在mysql中,有没有方法可以得到person 1的饼干、巧克力和Pi的总数?
人员1的预期结果:
Biscuits=2
Chocolates = 2
Pi = 0
提前谢谢!
最佳答案
你的关系设计很尴尬。它甚至不符合第一个标准形式,因为您的列值不是原子的(我看到一个冒号分隔的列表,对吧?)。我可以回答一个冗长复杂的问题,但最好先更改您的设计。
这可能是一个更好的设计:
CREATE TABLE meals(
person INT,
meal TEXT,
day TEXT
)
那么你在这张桌子上每顿饭吃一行,例如。,
person meal day
1 Biscuits onSunday
1 Chocolates onSunday
1 Biscuits OnMonday
1 Chocolates onTuesday
...
那么您的查询就这么简单了:
SELECT meal, COUNT(*) FROM meals WHERE person = 1 GROUP BY meal
好的是,您可以添加新的膳食,而无需更改查询。在另一个答案中,查询必须根据您介绍的每一顿新餐进行调整。您还可以添加剩余的工作日,而不必添加新列。