SQL:获取最大数量的ID(销售商品)的X,Y属性

时间:2017-03-15 14:04:16

标签: mysql sql max

我有2张桌子,一张包含门票和其他路线。我想生成2个属性,flight_DATE和route_CODE,用于销售的最大票数。由于没有存储售票数量的属性,我必须执行查询,查找count(number_ID)上的max(),因为每个ticket_ID代表售出的票证......对吗?我没有实际的数据库来尝试这个,所以这是我的查询:

SELECT routes.ROUTE_CODE , tickets.FLIGHT_DATE
    FROM routes JOIN tickets ON routes.ROUTE_CODE = tickets.ROUTE_CODE
WHERE count(ticket.TICKET_ID)  = (
            SELECT max(count(ticket.TICKET_ID)
            )

我对SQL不太自信,所以这甚至是正确的???提前致谢!

1 个答案:

答案 0 :(得分:1)

您的查询背后的想法是正确的,但您编写的max计算没有级别,因此您将获得所有售出的门票数。

您也不能在where子句中添加聚合列的条件(就像您对count(ticket.TICKET_ID所做的那样);这种条件会转到having子句。< / p>

这个应该做你需要的

SELECT  ROUTE_CODE, FLIGHT_DATE
JOIN    tickets
GROUP BY ROUTE_CODE , FLIGHT_DATE
HAVING  count(tickets.TICKET_ID) = ( /*filter the row with count = max count */
          SELECT  max(CNT) /* get the max of the counts */
          FROM    (
                    SELECT  count(TICKET_ID) as CNT /* get the counts at desired levels */
                    FROM    tickets
                    GROUP BY FLIGHT_DATE, ROUTE_CODE
                  )
        )

我删除了带有join表的routes,因为您使用的唯一列(ROUTE_CODE)也可以在tickets表中使用,但如果你想从该表中选择更多的数据,绝对不是错误。

顺便说一句,如果您没有可供测试的数据库,可以在rextester等网站上尝试查询