在表达式中使用 Distinct 从句

Using Distinct Clause with expressions

我正在尝试使用 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));

注意:我根据 MS Access 标签提交了这个答案。但是,我认为它应该在 SQL 服务器中工作相同,但不知道 MySQL.

GROUP BY Book.Genre, Merchandise.Price, Merchandise.Quantity 要求为这 3 个字段的每个唯一组合单独一行。由于您只需要一行,因此从 GROUP BY 子句中删除 Merchandise.PriceMerchandise.Quantity

此外 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;