COUNT个中的SELECT MAX,其他行变量不正确

时间:2018-11-04 16:16:23

标签: mysql sql join count max

我试图选择按状态分组的COUNT个最大值(因此,状态中每个不同的值一个最大值)。计数功能按预期工作。

print(glob('C90-01/*.pdf'))

这是结果,

Image 1

我使用下面的SQL语句尝试选择按状态分组的最大计数。

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

这是结果, image 2

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 中只出现一次的3个状态似乎很好,但是对于在第一个结果中出现两次的状态result 1,则存在一些问题。

SQL查询选择了正确的MAX(Count),即6,但是与其返回id为1027,它返回的id为1002,但在第一个结果中其计数仅为1。

我尝试使用不同的数据集进行尝试,但似乎无法获得实际MAX(Count)行的详细信息。

这是数据库设计参考 ER

SQL Fiddle

预期结果是这样(仅第二行输出需要更改)。 Output Current Output Link

1 个答案:

答案 0 :(得分:2)

you can use MySQL 8.0起,我们可以使用Window Functions解决您的问题。在w的分区上,我们将确定Row_Number()的行数最高的行为行号1,依此类推。现在,对于特定的wb,我们只需要考虑那些行号为1的行。

另外,您尝试使用['ansible-playbook', '--private-key=/path/to/tempfile.pem', '-i', 'ec2-XX-XXX-XX-XX.compute-1.amazonaws.com,', '-e', 'hostname=ec2-XX-XXX-XX-XX.compute-1.amazonaws.com', '-e', ...] 无效的SQL。较旧版本的MySQL宽容并允许使用。但是更新的版本不会,除非您关闭严格的state模式。但是,您不应禁用它,而应修复查询。基本要点是,在使用state时,您的GROUP BY子句应只包含聚合的列/表达式和/或在列表中定义的列/表达式。 only_full_group_by子句。阅读:Error related to only_full_group_by when executing a query in MySql

Group By

结果:

Select

View on DB Fiddle