2

让我先说是的,这是一个家庭作业问题。

它看起来很简单,但我无法让它工作。我刚刚开始子查询,我猜这就是我的老师想要的。

这是问题

5.  Write a SELECT statement that returns the name and discount percent 
    of each product that has a unique discount percent. In other words,
    don’t include products that have the same discount percent as another
    product.
     -Sort the results by the ProductName column.

这是我尝试过的

SELECT DISTINCT p1.ProductName, p1.DiscountPercent
FROM Products AS p1
WHERE NOT EXISTS
    (SELECT p2.ProductName, p2.DiscountPercent
     FROM Products AS p2
     WHERE p1.DiscountPercent <> p2.DiscountPercent)
ORDER BY ProductName;

任何帮助将不胜感激 - 谢谢!

4

4 回答 4

2

在检查唯一性时,使用COUNT()使它变得简单,您可以在HAVING子句中使用它,也可以直接选择它。

SELECT a.ProductName, a.DiscountPercent
FROM Products a
JOIN (SELECT DiscountPercent, COUNT(DiscountPercent) AS CT
      FROM Products
      GROUP BY DiscountPercent
     )b
 ON a.DiscountPercent = b.DiscountPercent
WHERE b.CT = 1

或者:

SELECT a.ProductName, a.DiscountPercent
FROM Products a
JOIN (SELECT DiscountPercent
      FROM Products
      GROUP BY DiscountPercent
      HAVING COUNT(DiscountPercent) = 1
     )b
 ON a.DiscountPercent = b.DiscountPercent
于 2013-10-15T13:50:54.557 回答
1

如果您需要使用子查询来解决此问题,您希望找到NOT EXISTS另一个产品具有相等( =) 折扣百分比而不是不同( <>) 的产品。<>仅当表中的所有 discountPercents 具有相同的值时,在该子句中使用 aNOT EXISTS才会返回结果(不存在具有不同折扣的任何其他产品 --> 所有折扣都相同)

并考虑到您需要添加一个条件以确保子查询没有找到执行它的同一行的匹配项(即p1与 不同的行p2

例如,如果productName足以识别 a product

SELECT DISTINCT p1.ProductName, p1.DiscountPercent
FROM Products AS p1
WHERE NOT EXISTS
    (SELECT p2.ProductName, p2.DiscountPercent
     FROM Products AS p2
     WHERE p1.DiscountPercent = p2.DiscountPercent
           AND p1.ProductName <> p2.ProductName)
ORDER BY ProductName;
于 2013-10-15T13:56:30.553 回答
1

试试这个,它和你的很相似,但not in你要确保折扣不存在于其他产品中。

SELECT p1.ProductName, p1.DiscountPercent
FROM Products AS p1
WHERE p1.DiscountPercent NOT IN
    (SELECT p2.DiscountPercent
     FROM Products AS p2
     WHERE p1.ProductName <> p2.ProductName)
ORDER BY ProductName
于 2013-10-15T14:02:01.527 回答
0

在mysql中尝试这个查询

select ProductName, DiscountPercent
from product
where DiscountPercent in (select DiscountPercent from product
                                 group by DiscountPercent
                                 having count(DiscountPercent)=1)
于 2013-10-15T14:09:09.490 回答