我假设答案是否定的,但总是对学习新东西感兴趣。这是设置;我有三个表,container_location,container_location_size和容器。是的,还有位置表,但我不相信我需要它。 container_location是一个连接表,列出了给定位置的容器。容器表描述了给定容器的特征。 container_location_size描述了如何将容器放入某个位置。我可以使用此SQL获取给定位置的容器数量:
SELECT location_code,
COUNT(*) AS container_count
FROM container_location
GROUP BY location_code
我想回答的问题是哪些位置已满(即容器的数量等于或大于该位置的最大值.cocket_location_size表有一列max_containers,用于指定容器的容量。那个位置。我想出了这个SQL来回答这个问题:
SELECT container_location_size.location_code
FROM container_location_size
JOIN (SELECT location_code,
COUNT(*) AS container_count
FROM container_location
GROUP BY location_code) AS contcount
ON contcount.location_code = container_location_size.location_code
WHERE contcount.container_count >= container_location_size.max_containers
这有效,但我想知道这是否可以作为单个选择完成。我遇到的问题是HAVING
要求所比较的任何列都在GROUP BY
中。我显然不希望按容器的最大数量进行分组。就像我在开始时所说的那样,我认为这不是一个可以解决的问题,但我感兴趣的是要么被证明是错误的,要么是替代方法。
答案 0 :(得分:1)
您可以将其写为:
SELECT l.location_code, COUNT(*) AS container_count
FROM container_location cl JOIN
location l
ON l.location_code = cl.location_code
GROUP BY l.location_code
HAVING COUNT(*) >= MAX(l.max_containers);
注意:
location(location_code)
是唯一的。这似乎是合理的。HAVING
子句使用MAX(l.max_containers)
。该列需要处于聚合函数中。l.max_containers
中加入GROUP BY
。