【发布时间】:2021-02-15 14:40:58
【问题描述】:
我有一个包含以下数据的表格:
Snack ID | Child | Fruit
1 Child A Apple
2 Child B Orange
3 Child A Banana
4 Child A Orange
5 Child C Banana
6 Child A Banana
7 Child C Banana
8 Child A Banana
还有一张表格列出了每个孩子家乡杂货店的水果:
Child ID | Child Name | Local Fruit 1 | Local Fruit 2 | Local Fruit 3
1 Child A Apple Mango Orange
2 Child B Orange Banana Cherry
3 Child C Banana Mango Apple
我需要为每个孩子吃的特定水果的数量从高到低排序结果,但前提是该水果是他们的家乡水果之一;
如果查询是“橙色”,我需要结果显示如下:
Hometown Orange Eaters (Highest to Lowest)
Child | Number of Fruits eaten
Child A 1
Child B 1
如果查询是“芒果”:
Hometown Mango Eaters
Child | Number of Fruits eaten
Child A 0
Child C 0
对于香蕉(孩子 A 没有展示,尽管香蕉吃得最多,因为这不是他们家乡的水果之一):
Hometown Banana Eaters
Child | Number of Fruits eaten
Child C 1
Child B 0
我目前使用的SQL命令如下:
select child, sum(fruit = '$fruit') `Number of fruits eaten`
from meals
group by child
order by `Number of fruits eaten` desc
但是,这只显示那些已经吃过水果的人的结果;例如对于香蕉示例,仅显示以下内容:
Hometown Banana Eaters
Child | Number of Fruits eaten
Child C 1
如何调整当前命令,以便显示所有“家乡水果”孩子,无论他们是否吃过所述水果?
【问题讨论】:
-
meals是否与您的一张表相关? -
是的,第一张桌子是'餐'桌,谢谢
-
Local Fruit 1、Local Fruit 2等列是反模式。如果当地水果超过3个怎么办?您应该使用为每个child ID + Local Fruit组合具有单独行的表来规范您的架构。
标签: mysql sql count sql-order-by inner-join