【发布时间】:2019-04-08 03:02:15
【问题描述】:
我正在尝试选择按状态对它们进行分组的 COUNT 的最大值(因此,状态中每个不同的值都有一个最大值)。 count 函数按预期工作。
SELECT c.id, c.name, t.name as type, COUNT(*) as count, c.state
FROM bookings_facilities f
JOIN bookings b
ON b.id = f.booking_id
JOIN clients c
ON c.id = b.client_id
JOIN client_types t
ON c.type = t.id
WHERE t.name = "School"
GROUP BY c.id
这是结果,
我使用下面的 SQL 语句尝试选择按状态分组的最大计数。
SELECT *, MAX(z.count)
FROM (SELECT c.id, c.name, t.name as type, COUNT(*) as count, c.state
FROM bookings_facilities f
JOIN bookings b
ON b.id = f.booking_id
JOIN clients c
ON c.id = b.client_id
JOIN client_types t
ON c.type = t.id
WHERE t.name = "School"
GROUP BY c.id) z
GROUP BY z.state
这是结果,
result 1 中只出现一次的 3 个状态似乎没问题,但对于在第一个结果中出现两次的状态 Selangor 来说,出现了一些问题。
SQL 查询选择了正确的 MAX(Count),即 6,但不是将 id 返回为 1027,而是返回 id 作为 1002,在第一个结果中只有 count 为 1。
我已经尝试过使用不同的数据集,但我似乎无法获得实际 MAX(Count) 行的详细信息。
这里是数据库设计供参考
预期结果是这样,(只需更改第二行输出)。 Current Output Link
【问题讨论】:
-
这是 nth-row-per-group 问题。如果您在 Stack Overflow 上正确搜索,您可以轻松获得 100 个相同的示例。还有几件事:您的
group by不是有效的 SQL,在较新版本的 MySQL 中,它会失败。其次,您不需要先对id进行分组,然后再使用子查询进行第二组。只需通过state进行直接分组即可 -
@MadhurBhaiya 我不知道这个问题叫什么。我现在正在寻找。我尝试使用单个组而不是两个组,但问题是我想根据客户的状态找到客户预订的最多设施。第一个按组计数,第二个按州对它们进行分组。如果我将它们结合起来,我不会得到我想要的结果。
-
如果您需要帮助,请帮助我们 :) 请提供相关且最少的示例数据,展示您的要求和预期输出。请参阅此链接以了解如何构建一个好的 SQL 问题:Why should I provide an MCVE for what seems to me to be a very simple SQL query?
-
我已经设置了一个 sql fiddle。我已经用我的预期结果更新了帖子。这里:sqlfiddle.com/#!9/8f68e3
-
您可以访问 MySQL 8.0 版吗?或者,你能升级吗?旧版本的解决方案将非常冗长。