【发布时间】:2016-08-25 11:32:03
【问题描述】:
这个问题类似于my previous question。但是有几个变种(我有高级 JOIN 的探针,我在论坛中找不到任何有用的信息)。
再次,我更改了表、字段和值的名称,只保留了我的数据库结构供您理解。
现在,假设我有这个(而且我不能改变结构):
.
人
ID | AGE | COUNTRY
1 | 25 | usa
2 | 46 | mex
...
.
食物
ID | PERSON_ID | CATEGORY | FOOD | UNITS
1 | 1 | fruit | apple | 2
2 | 1 | fruit | grape | 24
3 | 1 | fruit | orange | 5
3 | 1 | fast | pizza | 1
4 | 1 | fast | hamburguer | 3
5 | 1 | cereal | corn | 2
...
.
但是我有数百个people,它们的关系都在表foods中,foods 上大约有八个类别,每个类别有 4 到 24 个food。
好的,目前我正在使用类似于此的代码:
SELECT p.*, SUM(f.units) as orapple
FROM people p
LEFT JOIN foods f
ON f.person_id = p.id
AND f.food in('apple','orange')
WHERE p.id = 1
GROUP BY p.id
要得到这个:
ID | AGE | COUNTRY | ORAPPLE
1 | 25 | usa | 7
请注意,结果中的orapple 是units 上的数字之和,具体而言,其中food 等于“橙色”和“苹果”。
现在,我需要它来添加每个类别的数量,例如,我需要这个:
ID | AGE | COUNTRY | ORAPPLE | FRUIT | FAST | CEREAL
1 | 25 | usa | 7 | 3 | 2 | 1
【问题讨论】:
-
sum(category='fruit')
-
你能对所有给定的类别进行硬编码,还是必须是动态的?
-
@PaulSpiegel 我可以对类别进行硬编码(在其他部分添加 cmets 以记住在新类别的情况下更改代码)。