将Distinct子句与表达式一起使用

时间:2016-01-26 06:18:25

标签: mysql sql sql-server ms-access ms-access-2013

我正在尝试使用distinct子句将这两个值一起添加,但是当我这样做时,它仍然给了我两个单独的行。最后,我想将这两行添加到一起。

A screenshot of the table view from my query

基本上这是一个跟踪书籍,页面,数量,价格等的数据库。我试图找到适合某种类型(非小说类)的书籍的总价值,并且超过一定的价格阈。然后我将这两个相乘以得到值。

我的数据库中有两条符合此描述的记录,它显示了这两条记录的各个值

 SELECT DISTINCT  Sum([Price]*[Quantity]) AS Total_Value
 FROM Merchandise INNER JOIN Book ON Merchandise.MerchID = Book.ISBN
 GROUP BY Book.Genre, Merchandise.Price, Merchandise.Quantity
 HAVING (((Book.Genre)="Nonfiction") AND ((Merchandise.Price)>18));

1 个答案:

答案 0 :(得分:1)

注意:我根据MS Access标记提交了此答案。但是,我认为它在SQL Server中的工作方式应该相同,但不了解MySQL。

GROUP BY Book.Genre, Merchandise.Price, Merchandise.Quantity要求为这3个字段的每个唯一组合分别设置一行。由于您只想要一行,请从Merchandise.Price子句中删除Merchandise.QuantityGROUP BY

同样DISTINCTGROUP BY查询中没有用,所以你也可以删除它。

SELECT Sum([Price]*[Quantity]) AS Total_Value
FROM Merchandise INNER JOIN Book ON Merchandise.MerchID = Book.ISBN
GROUP BY Book.Genre
HAVING Book.Genre='Nonfiction' AND Merchandise.Price>18;

如果您将HAVING更改为WHERE子句,则可以在执行GROUP BY聚合之前排除您不想要评估的行:

SELECT Sum([Price]*[Quantity]) AS Total_Value
FROM Merchandise INNER JOIN Book ON Merchandise.MerchID = Book.ISBN
WHERE Book.Genre='Nonfiction' AND Merchandise.Price>18
GROUP BY Book.Genre;

实际上,对于这个特定的查询,我怀疑你根本不需要GROUP BY

SELECT Sum([Price]*[Quantity]) AS Total_Value
FROM Merchandise INNER JOIN Book ON Merchandise.MerchID = Book.ISBN
WHERE Book.Genre='Nonfiction' AND Merchandise.Price>18;