Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 分组方式,在同一字段上有多个_Mysql_Sql_Group By_Having - Fatal编程技术网

Mysql 分组方式,在同一字段上有多个

Mysql 分组方式,在同一字段上有多个,mysql,sql,group-by,having,Mysql,Sql,Group By,Having,示例表: a | b ----- 1 | 1 1 | 2 2 | 1 3 | 0 3 | 1 4 | 1 4 | 2 4 | 3 5 | 0 我想获取列a的所有不同的值,这些值与列b中的值关联,其中b=1和b=2 结果应该是: a - 1 4 这是否适用于分组依据?我尝试了以下SQL,但它始终提供0个结果: SELECT t.a FROM table t GROUP BY t.a, t.b HAVING t.b = 1 AND t.b = 2 MySQL似乎在同一行上调用和语句,而不是在分

示例表:

a | b
-----
1 | 1
1 | 2
2 | 1
3 | 0
3 | 1
4 | 1
4 | 2
4 | 3
5 | 0
我想获取列
a
的所有
不同的
值,这些值与列
b
中的值关联,其中
b=1和b=2

结果应该是:

a
-
1
4
这是否适用于
分组依据
?我尝试了以下SQL,但它始终提供0个结果:

SELECT t.a
FROM table t
GROUP BY t.a, t.b
HAVING t.b = 1 AND t.b = 2
MySQL似乎在同一行上调用
语句,而不是在分组的
b
行上调用


有什么想法吗<代码>:)

你非常接近。试试这个:

SELECT t.a
FROM table t
GROUP BY t.a
HAVING SUM(t.b = 1) > 0 AND SUM(t.b = 2) > 0;
每个
SUM()
条件统计条件为真的行数。您需要两者,因此需要
>0


EDIT
groupby

中删除
t.b
您非常接近。试试这个:

SELECT t.a
FROM table t
GROUP BY t.a
HAVING SUM(t.b = 1) > 0 AND SUM(t.b = 2) > 0;
每个
SUM()
条件统计条件为真的行数。您需要两者,因此需要
>0


编辑
分组中删除
t.b
一种方法如下:

SELECT t.a
FROM table t
GROUP BY t.a
HAVING SUM(CASE WHEN b=1 THEN 1 ELSE 0 END) <> 0
   AND SUM(CASE WHEN b=2 THEN 1 ELSE 0 END) <> 0
选择t.a
来自表t
t.a.分组
求和(b=1时为1,否则为0)0
和和(b=2时为1,否则为0结束)0
请注意,您需要将
t.b
groupby
中删除,否则结果将不正确


一种方法如下:

SELECT t.a
FROM table t
GROUP BY t.a
HAVING SUM(CASE WHEN b=1 THEN 1 ELSE 0 END) <> 0
   AND SUM(CASE WHEN b=2 THEN 1 ELSE 0 END) <> 0
选择t.a
来自表t
t.a.分组
求和(b=1时为1,否则为0)0
和和(b=2时为1,否则为0结束)0
请注意,您需要将
t.b
groupby
中删除,否则结果将不正确


这应该可以做到:

SELECT t.a
FROM table t
WHERE (t.b = 1 OR t.b = 2)
GROUP BY t.a
HAVING COUNT(t.a) > 1

这应该可以做到:

SELECT t.a
FROM table t
WHERE (t.b = 1 OR t.b = 2)
GROUP BY t.a
HAVING COUNT(t.a) > 1

您可以像这样简单地使用子查询:

select a from t where b=1 and a in (select a from t where b=2);

您可以像这样简单地使用子查询:

select a from t where b=1 and a in (select a from t where b=2);

是 啊有时你会因为树木而错过森林。。。非常感谢。编辑您必须从
组中删除
t.b
。然后我会接受的,是的。有时你会因为树木而错过森林。。。非常感谢。编辑您必须从
组中删除
t.b
。请注意,这个查询只在假设表中没有重复的
(a,b)
元组的情况下工作。例如,如果将重复的
(2,1)
记录添加到OP的表中,
2
也将添加到输出()。这一点很好!因此,此答案仅适用于具有
唯一(a,b)
约束的数据集,这对于问题来说是可以的,但确实应该提到。请注意,此查询仅在假设表中没有重复的
(a,b)
元组的情况下工作。例如,如果将重复的
(2,1)
记录添加到OP的表中,
2
也将添加到输出()。这一点很好!因此,这个答案只适用于具有
唯一(a,b)
约束的数据集,这对于这个问题是可以的,但实际上应该已经提到。