代码之家  ›  专栏  ›  技术社区  ›  jh86

创建一个查询,将发现服装项目的价格超过50美元

  •  1
  • jh86  · 技术社区  · 8 年前

    我需要帮助,在那里我可以创建一个qquery,将找出哪个服装类别已售出超过50美元。
    到目前为止,我已经写了以下内容:

    SELECT  
    ITEM_TYPE.Description AS [Item Type Name], 
    ITEM.ItemID * price AS [Total Spent]
    FROM ITEM
    INNER JOIN ITEM_TYPE ON ITEM.ItemTypeID = ITEM_TYPE.ItemTypeID
    INNER JOIN ORDER_ITEM ON ITEM.ItemID = ORDER_ITEM.ItemID
    where ITEM_TYPE.Description Like '%Ladies%'
    

    但输出应仅显示1行“服装女士”,总销量为80.50

    3 回复  |  直到 8 年前
        1
  •  0
  •   Bohemian    8 年前

    我想你想要一个 GROUP BY 子句和聚合函数 SUM() :

    SELECT  
    ITEM_TYPE.Description AS [Item Type Name], 
    SUM(price) AS [Total Spent] -- ### apply SUM()
    FROM ITEM
    INNER JOIN ITEM_TYPE ON ITEM.ItemTypeID = ITEM_TYPE.ItemTypeID
    INNER JOIN ORDER_ITEM ON ITEM.ItemID = ORDER_ITEM.ItemID
    where ITEM_TYPE.Description Like '%Ladies%'
    GROUP BY ITEM_TYPE.Description -- ### add grouping for SUM()
    

    price 根据项目ID。如果 全部的 行项目的价格,然后 SUM(price) 同上。如果 价格 SUM(price * quantity) .

    如果需要将总数四舍五入到小数点后2位,请使用 ROUND :

    ROUND(SUM(ITEM.ItemID * price), 2) AS [Total Spent] -- ### apply ROUND()
    
        2
  •  0
  •   Zorkolot    8 年前

    你可以做一个总和,这是一个总和。应用聚合时,必须按任何非聚合列分组。要对使用的聚合进行过滤,必须为选择指定条件。例如:

    SELECT  
    ITEM_TYPE.Description AS [Item Type Name], 
    SUM(ITEM.ItemID * price) AS [Total Spent]  --aggregate column
    FROM ITEM
    INNER JOIN ITEM_TYPE ON ITEM.ItemTypeID = ITEM_TYPE.ItemTypeID
    INNER JOIN ORDER_ITEM ON ITEM.ItemID = ORDER_ITEM.ItemID
    where ITEM_TYPE.Description Like '%Ladies%'
    GROUP BY ITEM_TYPE.Description        --GROUP BY the non aggregate columns
    HAVING SUM(ITEM.ItemID * price) > 50  --HAVING filters the aggregate column
    
        3
  •  0
  •   clemens    8 年前

    GROUP BY HAVING 条款 分组依据 对于将具有相同描述的所有行分组在一起,以及 对于价格总和超过50的过滤器。

    SELECT  
        ITEM_TYPE.Description AS [Item Type Name], 
        SUM(ITEM.ItemID * price) AS [Total Spent]
    FROM ITEM
        INNER JOIN ITEM_TYPE ON ITEM.ItemTypeID = ITEM_TYPE.ItemTypeID
        INNER JOIN ORDER_ITEM ON ITEM.ItemID = ORDER_ITEM.ItemID
    WHERE ITEM_TYPE.Description Like '%Ladies%'
    GROUP BY ITEM_TYPE.Description      
    HAVING SUM(ITEM.ItemID * price) > 50
    

    为了更好地理解having和group by子句,您可以阅读更多关于它们的内容 https://www.w3schools.com/sql/sql_having.asp