(初学者SQL)根据其他列的总和选择行

时间:2018-03-26 11:00:50

标签: sql oracle

真的很奇怪的标题开头。但你完全理解这个解释。

直截了当地说,我有一张表来跟踪不同物品的销售情况。

+ -----+-------------+-------+----------+
| Name | Sell_Date   | Price | Quantity |
+ -----+-------------+-------+----------+
| Doll | 14-JAN-2005 | 12    | 2        |
| Bike | 07-FEB-2013 | 450   | 1        |
| Doll | 15-SEP-2016 | 12    | 5        |
+ -----+-------------+-------+----------+

示例中不需要更多。

因此,使用此表,我想选择项目的名称并按销售数量(升序)对它们进行排序。考虑到这一点,结果应该是Bike,然后是Doll。我的问题是某些项目可能会出现多次,因此需要添加其数量值。

因为我是初学者,如果我需要使用WITH方法,我很困惑我应该在哪里做SUM函数,尤其是我将如何为每个特定项目执行

2 个答案:

答案 0 :(得分:2)

您需要SUM和GROUP BY:

SELECT NAME, SUM(QUANTITY)
  FROM YOUR_TABLE
  GROUP BY NAME
  ORDER BY SUM(QUANTITY) ASC

答案 1 :(得分:2)

如果要在特定级别聚合 - 在这种情况下,在name-级别求和,则需要使用group by子句。但是您需要明确在哪个级别进行分组并在选择字段列表中输入它们。 对于你的例子:

SELECT
name,
sum(Quantity) as tot_Quantity
FROM table
GROUP BY name -- this will give you per name the total quantity
ORDER BY 2 desc -- outputs with all the rows ordered descending by the second field in the select list

在更精细的级别聚合:

SELECT 
name,
sell_date,
sum(Quantity) as tot_Quantity
FROM table
GROUP BY name,sell_date -- this will give you per name and date, total quantity
ORDER BY 3 desc -- outputs with all the rows ordered descending by the third field