查询以选择包含出现少于8次的值的所有行

问题描述

我正在尝试建立一个一个父母和8个孩子的系统。我通过有一个user_id和tier_id表来完成此操作。现在,我需要获取少于8次的所有tier_id的列表,所以我知道该层是不完整的,然后可以转到另一个列表并获得替换。

Retailers  Asia  USA
------------------
A          1    5
B               6
C          2    7
D               2
E          3    3
F               1
G          4    4

我知道这是不对的,但是也许可以帮助向一个天才解释我正在尝试做什么。

解决方法

首先,您的查询需要一个group by子句,该select子句应与它们保持一致

select tier_id,count(*) cnt
from tiers
group by tier_id

这给您每个tier_id一行,并包含相应的行数。然后,您可以使用having子句来过滤计数:

select tier_id,count(*) cnt
from tiers
group by tier_id
having count(*) < 8
,

您必须在HAVING子句中使用GROUP BY

 SELECT tier_id,count(*) as TotalCount
 FROM tiers
 GROUP BY tier_id
 HAVING TotalCount < 8

也许这会对您有所帮助。