Mysql SQL:基于两列条件选择行
我想知道是否有一个优雅的SQL查询可以根据两列条件选择行 特别是,参考下面的上表,我试图返回V1列中任何“组”的所有行,该组中只有一行包含V2列中的值“1”Mysql SQL:基于两列条件选择行,mysql,Mysql,我想知道是否有一个优雅的SQL查询可以根据两列条件选择行 特别是,参考下面的上表,我试图返回V1列中任何“组”的所有行,该组中只有一行包含V2列中的值“1” V1 V2 V3 V4 ---------- ---------- ---------- ---------- group1 1 2 4 group1 0
V1 V2 V3 V4
---------- ---------- ---------- ----------
group1 1 2 4
group1 0 3 5
group1 0 2 4
group2 0 3 5
group2 0 2 4
group2 0 3 5
group3 1 2 4
group3 0 3 5
group3 0 2 4
group3 0 3 5
group4 1 2 4
group4 1 3 5
因此,上述数据集将返回
V1 V2 V3 V4
---------- ---------- ---------- ----------
group1 1 2 4
group1 0 3 5
group1 0 2 4
group3 1 2 4
group3 0 3 5
group3 0 2 4
group3 0 3 5
您需要使用嵌套查询:内部查询来获取具有多个V2=1的组,外部查询来选择该组的所有记录:
SELECT *
FROM tablename AS outer
INNER JOIN (
SELECT V1
FROM tablename
GROUP BY V1
HAVING COUNT(IF(V2 = 1, 1, NULL))
) AS inner ON inner.V1 = outer.V1
同样的问题也可以用EXIST()条件来解决,但效率可能会低一些。解决这个问题的方法多种多样。但是使用
连接
,正确的逻辑是:
SELECT t.*
FROM t JOIN
(SELECT v1
FROM tablename
GROUP BY v1
HAVING SUM(v2 = 1) = 1
) tt
ON t.v1 = tt.v1;
如果v2
仅接受值0和1,则可以使用SUM(v2)=1
语法SUM(v2=1)
是MySQL中的缩写。比较v2=1
是一个返回真/假的布尔表达式。在数字上下文中(例如SUM()
),true被视为1
,false被视为0
如果您只需要这是真的v1
值,那么子查询将回答该问题。这也将起作用:
SELECT T.* FROM TEST T JOIN (
SELECT V1, SUM(V2) AS SUMA FROM TEST
GROUP BY V1
HAVING SUM(V2) = 1
) X ON T.V1 = X.V1
你可以在这里看到结果:我非常自豪地看到——有时——它碰巧以同样的方式思考:):)谢谢你,戈登。我非常感谢你在这个论坛上的帮助,所以我只订购了一份使用SQL和Excel(第二版)的数据分析的新副本,我期待着收到。谢谢你的帮助,我也非常感谢添加的链接!谢谢,我也非常感谢您提供的额外细节:)