基于聚合的MySQL语法查询
我有一张名为TICKET的表格,上面有FLIGHTNUMBER和Insurated两列。被保险人只有0或1个值。FLIGHTNUMBER有重复项。我想得到保险中最大1个的航班号。以下是我尝试过的:基于聚合的MySQL语法查询,mysql,sql,database,Mysql,Sql,Database,我有一张名为TICKET的表格,上面有FLIGHTNUMBER和Insurated两列。被保险人只有0或1个值。FLIGHTNUMBER有重复项。我想得到保险中最大1个的航班号。以下是我尝试过的: SELECT FLIGHTNUMBER FROM (SELECT FLIGHTNUMBER,SUM(INSURED) AS INSURANCE_COUNT FROM TICKET GROUP BY TICKET.FLIGHTNUMBER) AS OUT2 WHERE O
SELECT FLIGHTNUMBER
FROM (SELECT FLIGHTNUMBER,SUM(INSURED) AS INSURANCE_COUNT
FROM TICKET
GROUP BY TICKET.FLIGHTNUMBER) AS OUT2
WHERE OUT2.INSURANCE_COUNT = MAX(INSURANCE_COUNT) ;
及
但两者都在造成错误。你能告诉我正确的语法吗。提前感谢。第一个不起作用,因为您不能在
WHERE
子句中使用聚合函数。只有在选择了所有行之后,才会发生聚合,并且使用WHERE
选择行,因此存在鸡和蛋的问题
第二种方法不起作用,因为无法嵌套聚合函数
您不需要计算MAX(保险计数)
。只需对查询进行排序,然后使用第一个查询
SELECT flightnumber
FROM (SELECT flightnumber, SUM(INSURED) AS insurance_count
FROM ticket
GROUP BY flightnumber) AS out2
ORDER BY insurance_count DESC
LIMIT 1
您甚至不需要在SELECT
列表中使用insurance\u count
,因此您不需要将其包装到子查询中即可将其删除
SELECT flightnumber
FROM ticket
GROUP BY flightnumber
ORDER BY SUM(insured) DESC
LIMIT 1
但是,如果有多个航班的最大航班数相同,则只返回其中一个航班。如果您需要获取所有这些数据,那么您需要编写一个子查询来获取最大值,并与之连接
SELECT flightnumber
FROM (SELECT flightnumber, SUM(insured) AS insurance_count
FROM ticket
GROUP BY flightnumber) AS out2
JOIN (SELECT SUM(insured) AS max_insurance_count
FROM ticket
GROUP BY flightnumber
ORDER BY max_insurance_count DESC
LIMIT 1) AS out3
ON out2.insurance_count = out3.max_insurance_count
你可以做:
SELECT flightnumber, SUM(insured) AS insured_count
FROM ticket
GROUP BY flightnumber
ORDER BY insured_count DESC
LIMIT 1;
这只是投保
列上的总和
聚合,按航班号
分组,并按投保计数
降序排序。我们只保留第一个结果
这并不考虑如果两个航班号码的投保金额相同,将会发生什么。您可以使用第二个ORDER BY
字段打破联系,或者运行另一个外部查询
如果您有一个
flightnumber
表,您可以在每次修改ticket
表时使用SUM()
更新其insured\u count
字段。如果您经常运行此报告,则效率会更高。ticket
表以许多行结束,并且大多数行在航班完成后不会更改。还值得注意的是,除非结果中存在保险计数问题,否则实际上不需要子查询<代码>按航班号按保险顺序分组\u count DESC LIMIT 1也可以。@ueerdo我做得更好。啊,是的,我忘记了聚合实际上不必在结果集中。如果有多个航班的最大值相同,您需要获得所有航班吗?
SELECT flightnumber, SUM(insured) AS insured_count
FROM ticket
GROUP BY flightnumber
ORDER BY insured_count DESC
LIMIT 1;