我有一份“星期日”“星期日”和“星期二”列的餐桌食物:

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

好的是,您可以添加新的膳食,而无需更改查询。在另一个答案中,查询必须根据您介绍的每一顿新餐进行调整。您还可以添加剩余的工作日,而不必添加新列。

09-27 15:20