SQL 特定查询的订单结果计数
SQL Order Results Count by specific Query
我有一个 table,其中包含以下数据:
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
另一个 table 列出了每个 Child 家乡杂货店的水果:
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
我需要从高到低排序每个人吃的特定水果的数量child,但前提是该水果是他们家乡的水果之一;
如果查询是“橙色”,我需要结果显示如下:
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
对于香蕉(Child 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
我如何调整当前命令,以便显示所有“家乡水果”children,无论他们是否吃过所说的水果?
这是一个选项:
select child,
(select count(*) from meals m where m.child = l.child and m.fruit = ?) cnt
from listing l
where ? in (local_fruit_1, local_fruit_2, local_fruit_3)
order by cnt
逻辑是过滤 listing
table 可以找到相关水果的行。然后,我们使用相关子查询来计算被吃掉的水果的数量。
问号代表你要分析的水果。
我认为这是一个 join
和带过滤的聚合:
select s.child, sum(c.fruit = $fruit) as num_fruit
from snacks s join
child c
on c.child_id = s.child
where $fruit in (c.local1, c.local2, . . . )
group by s.child
order by num_fruit desc;
我有一个 table,其中包含以下数据:
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
另一个 table 列出了每个 Child 家乡杂货店的水果:
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
我需要从高到低排序每个人吃的特定水果的数量child,但前提是该水果是他们家乡的水果之一;
如果查询是“橙色”,我需要结果显示如下:
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
对于香蕉(Child 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
我如何调整当前命令,以便显示所有“家乡水果”children,无论他们是否吃过所说的水果?
这是一个选项:
select child,
(select count(*) from meals m where m.child = l.child and m.fruit = ?) cnt
from listing l
where ? in (local_fruit_1, local_fruit_2, local_fruit_3)
order by cnt
逻辑是过滤 listing
table 可以找到相关水果的行。然后,我们使用相关子查询来计算被吃掉的水果的数量。
问号代表你要分析的水果。
我认为这是一个 join
和带过滤的聚合:
select s.child, sum(c.fruit = $fruit) as num_fruit
from snacks s join
child c
on c.child_id = s.child
where $fruit in (c.local1, c.local2, . . . )
group by s.child
order by num_fruit desc;