You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite查询需求:仅显示最低采购额+最少采购量的媒体类型行

解决SQLite中查询采购量最少且总额最低媒体类型的问题

你的需求是返回唯一一行,对应采购量最少且采购总额最低的媒体类型,但当前查询返回多行,核心问题在于两个子查询是全局统计,没有和分组关联,且未做筛选排序。

当前问题代码

SELECT 
    M.name AS 'MediaType Name', 
    (SELECT MIN(I.unitprice * I.quantity) FROM tracks) AS 'Minimum Total Purchase Value',
    (SELECT COUNT(I.Quantity) FROM invoice_items) AS 'Total Number of Purchase'
FROM 
    media_types M 
JOIN 
    tracks T 
JOIN 
    invoice_items I ON M.MediaTypeId = T.MediaTypeId 
                    AND T.trackid = I.trackid
GROUP BY 
    M.name

问题分析

  • 你写的两个子查询都是全局统计:第一个取所有track的最小单笔订单金额,第二个取所有invoice_items的记录数,完全没有按媒体类型分组计算,所以每个媒体类型行都显示相同的错误数值。
  • 没有对分组后的结果做排序和筛选,无法定位到采购总额最低且采购量最少的那一行。

修正后的代码

SELECT 
    M.name AS 'MediaType Name',
    SUM(I.unitprice * I.quantity) AS 'Total Purchase Value',
    SUM(I.quantity) AS 'Total Number of Purchase'
FROM 
    media_types M
JOIN tracks T ON M.MediaTypeId = T.MediaTypeId
JOIN invoice_items I ON T.trackid = I.trackid
GROUP BY 
    M.name
ORDER BY 
    `Total Purchase Value` ASC,
    `Total Number of Purchase` ASC
LIMIT 1;

代码说明

  1. 分组计算指标:用SUM(I.unitprice * I.quantity)计算每个媒体类型的总采购额,SUM(I.quantity)计算总采购量,这两个聚合函数会和GROUP BY M.name关联,得到每个类型的真实数据。
  2. 排序规则:先按总采购额升序(找最低总额),再按总采购量升序(总额相同时找最少采购量)。
  3. 限制结果行数:用LIMIT 1只取排序后的第一行,就是你要的目标结果。

内容的提问来源于stack exchange,提问作者ara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:15:44