返回始终具有相同值的记录的SQL查询

返回始终具有相同值的记录的SQL查询,sql,Sql,我正在学习SQL并做一些练习。我无法给出确切的情况,因为我正在练习的网站不希望在网上直接找到任何解决方案,所以我将用其他方式解释这种情况。我遇到的问题是使用一个包含X、Y和Z列的表XYZ。X列可以有重复项,Z列也可以有重复项。我需要找到的是,X在Z中总是有相同的值 X Y Z 1 ? a 1 ? a 2 ? b 2 ? c 3 ? c 3 ? a X Y Z 1.A. 1

我正在学习SQL并做一些练习。我无法给出确切的情况,因为我正在练习的网站不希望在网上直接找到任何解决方案,所以我将用其他方式解释这种情况。我遇到的问题是使用一个包含X、Y和Z列的表XYZ。X列可以有重复项,Z列也可以有重复项。我需要找到的是,X在Z中总是有相同的值

X Y Z 1 ? a 1 ? a 2 ? b 2 ? c 3 ? c 3 ? a X Y Z 1.A. 1.A. 2.B 2.C 3.C 3.A. 将返回我1,因为当X为1时,Z始终是a

我真正的问题是,我觉得我缺少一些SQL知识来实现这一点。如果有人能给我一个提示,不是一个解决方案,而是一个指向我所缺少的SQL知识的链接,或者对SQL语句的简要解释,我将不胜感激

否则,祝你有一个愉快的一天。 大卫


编辑:通过X从XYZ组中选择X,使计数(不同的Z)=1起作用,并且我很理解它。现在我无法理解的是如何将Z列添加到结果集

有几个SQL简单函数可以用来实现这一点

select x, min(z)
from tab
group by x 
having min(z) = max(z) 
-- or
having count(distinct z) = 1
DISTINCT
MSDN


分组依据

问题和答案也是如此,而不是提示。谢谢,这有助于我更好地理解分组依据。我仍然不明白的是如何在不更改结果集的情况下将列包含到select中。我知道如果我在select中包含该列,我还需要将其包含在group by中,但是当我执行结果集时,它看起来似乎从未考虑HAVING子句,并返回了4倍多的行。对于group by,有一点我真的不明白。当然,如果将另一列(Y)添加到group by中,会得到不同的结果,这就是对(X和Y)列的每个不同组合进行分组。您可以使用MIN(Y),但似乎需要X=1的所有行。如果这是您想要的,我也可以添加解决方案。:)我想要的是得到完全相同的结果集,但是Z的值在X旁边。我现在知道为什么我得到了不同的结果集,非常感谢你的评论,我知道这不仅仅是一个问答,但它澄清了这一点,我很感谢你花时间解释为什么我的结果集不同(X和Y的组合)