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

Posted

技术标签:

【中文标题】SQL:获取最大数量的 ID(已售商品)的 X、Y 属性【英文标题】:SQL: Obtain X, Y attributes for the greatest number of ID's (items sold) 【发布时间】:2017-03-15 14:04:15 【问题描述】:

我有 2 张桌子,一张包含门票和其他路线。我想生成 2 个属性,flight_DATE 和 route_CODE,以获得最大数量的售票。由于没有存储售出票数的属性,我必须执行查询以查找计数(ticket_ID)数上的 max(),因为每个票证_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】:

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

您也不能在您的 where 子句中为聚合列添加条件(就像您对 count(ticket.TICKET_ID) 所做的那样;这种条件属于 having 子句。

这个应该做你需要的

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
                  )
        )

我删除了 joinroutes 表,因为您使用的唯一列 (ROUTE_CODE) 在 tickets 表上也可用,但如果您想从中选择更多数据,这可能会很有用表,绝对不是错误。

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

【讨论】:

以上是关于SQL:获取最大数量的 ID(已售商品)的 X、Y 属性的主要内容,如果未能解决你的问题,请参考以下文章

Python顶层for循环只运行一次而不是遍历列表

使用哪个弹簧事务隔离级别来维护已售产品的计数器?

使用 SQL 获取已购买商品的数量 - Woocommerce

SQL - 我需要显示 2012 年销售的商品名称、商品价格和数量

php中使用redis实现秒杀

SQL 计算发票表中商品的销售次数