【发布时间】:2022-12-03 13:55:04
【问题描述】:
我的表结构是这样的:
+----------+------------+---------------+
| id | manager_id | restaurant_id |
+----------+------------+---------------+
| 1 | 1 | 1001 |
| 2 | 1 | 1002 |
| 3 | 2 | 1003 |
| 4 | 2 | 1004 |
| 5 | 2 | 1005 |
| 6 | 3 | 1006 |
+----------+------------+---------------+
我想检索每个 manager_id 聚合的所有 restaurant_id,此外,我还需要过滤每个经理的 count(restaurant_id):仅返回拥有超过 1 家餐厅且少于 3 家餐厅的经理的餐厅。
所以最后,结果将是
+---------------+------------+
| restaurant_id | manager_id |
+---------------+------------+
| 1001 | 1 |
| 1002 | 1 |
+---------------+------------+
我尝试了类似的东西:
SELECT
restaurant_id,
manager_id,
COUNT(*) AS restaurant_count
FROM
Manager_Restaurant
GROUP BY
manager_id
HAVING
restaurant_count > 1 and
restaurant_count < 3;
但是由于分组,每个经理只返回一行,我想要所有的餐馆。
【问题讨论】:
-
写 > 1 和 < 3 而不是 = 2 的目的是什么?计数总是产生整数值。此外,您的计数选择在这种情况下没有意义,您也可以只写 SELECT...,2。你确定你的描述是正确的吗?
-
谢谢乔纳斯。这是更复杂数据的简化版本。在实际用例中,我实际上需要
1 > restaurant_count > 5。只是想让示例保持简单,但这令人困惑。
标签: sql count grouping aggregation