gpt4 book ai didi

mysql - Left Join + count + MySQL 求和

转载 作者:可可西里 更新时间:2023-11-01 06:33:43 26 4
gpt4 key购买 nike

这个问题类似于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

...

.

但我有数百个,他们在表foods 中都有关系,foods 大约有八个类别,每个类别有 4 到 24 个食物

好吧,目前我正在使用与此类似的代码:

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

请注意,结果中的 orappleunits 上数字的总和,具体来说,其中 food 等于 'orange' 并且'苹果'。

现在,我需要它来添加每个类别的数量,例如,我需要这个:

ID | AGE | COUNTRY | ORAPPLE | FRUIT | FAST | CEREAL
1 | 25 | usa | 7 | 3 | 2 | 1

最佳答案

使用来自

的结果
SELECT DISTINCT category FROM foods;

构建以下查询:

SELECT p.*,
SUM(CASE WHEN f.food in ('apple','orange') THEN f.units ELSE 0 END) as orapple,
COUNT(f.category='fruit' OR NULL) AS fruits,
COUNT(f.category='fast' OR NULL) AS fast,
COUNT(f.category='cereal' OR NULL) AS cereal
FROM people p
LEFT JOIN foods f
ON f.person_id = p.id
WHERE p.id = 1
GROUP BY p.id;

http://sqlfiddle.com/#!9/71e12/21

在网络或 SO 中搜索 查找更多示例。

关于mysql - Left Join + count + MySQL 求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36953003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com