![](/img/trans.png)
[英]SQL using group by to select groups where all records in a group have a certain value
[英]SQL — return groups of records where one of the fields does not match amongst all records in the group
在下面的示例表中,所有具有相同O_Id
记录也应具有相同的价格。 显然,对于O_Id
的1和3,并非所有记录的价格都相同。
我很难编写查询,该查询将返回具有与一个或多个其他记录相同的O_Id
的表中的所有记录,但其中OrderPrice
在具有相同O_id
记录之间不匹配的O_id
。
样表:
+------+------------+------------+
| Type | MySQL | OrderPrice |
+======+============+============+
| 1 | 2008/11/12 | 1000 |
| 1 | 2008/10/23 | 2000 |
| 2 | 2008/09/02 | 700 |
| 2 | 2008/09/03 | 700 |
| 3 | 2008/08/30 | 2000 |
| 3 | 2008/10/04 | 2100 |
| 3 | 2008/08/30 | 2000 |
| 3 | 2008/10/04 | 2000 |
+------+------------+------------+
样本结果集:
+------+------------+------------+
| Type | MySQL | OrderPrice |
+======+============+============+
| 1 | 2008/11/12 | 1000 |
| 1 | 2008/10/23 | 2000 |
| 3 | 2008/08/30 | 2000 |
| 3 | 2008/10/04 | 2100 |
| 3 | 2008/08/30 | 2000 |
| 3 | 2008/10/04 | 2000 |
+------+------------+------------+
您可以在以下一种以上的不同价格下获得O_Id
:
SELECT O_Id
FROM myTable
GROUP BY O_Id
HAVING COUNT(DISTINCT OrderPrice) > 1
并将其用作内部语句来获取这些O_Id
的所有行:
SELECT *
FROM myTable
WHERE O_Id IN (
SELECT O_Id
FROM myTable
GROUP BY O_Id
HAVING COUNT(DISTINCT OrderPrice) > 1
)
这是使用Exists
的解决方案:
Select * From OrderTable O
Where Exists(
Select O_Id From OrderTable
Where O_Id = O.O_Id
Group By O_Id
Having Count(Distinct OrderPrice) > 1 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.