Mysql 如何确定值是否显示在分组中
给定表Mysql 如何确定值是否显示在分组中,mysql,Mysql,给定表foo: Num Letter ------------ 1 A 1 B 1 B 2 C 3 A 3 C 3 D 如果我选择*GROUP BY Num Num Letter ------------ 1 A 2 C 3 A 我想将其细化为: Num Has_No_Letter_C --------------------- 1 Yes 2 No 3 No 可能有一个简单
foo
:
Num Letter
------------
1 A
1 B
1 B
2 C
3 A
3 C
3 D
如果我选择*GROUP BY Num
Num Letter
------------
1 A
2 C
3 A
我想将其细化为:
Num Has_No_Letter_C
---------------------
1 Yes
2 No
3 No
可能有一个简单的SELECT IF()
加上一个ORDER BY
,但我现在看不到它
在我的实际示例中,生成的表被左连接到另一个表,如果我的另一个表
bar
有Num
=4行,我希望能够拒绝No
条目,但保留NULL
s,您可以轻松确定是否存在相应的值
如果您将值“C”考虑在内,则此操作将完成:
SELECT t1.num,
IF(ISNULL(t2.num),"Yes","No") AS "Has_No_Letter_C"
FROM yourtable AS t1
LEFT JOIN yourtable AS t2 ON t1.num=t2.num AND t2.`letter` = "C"
GROUP BY num;
在IF
中使用求和(条件)
:
SELECT Num,
IF(SUM(Letter = 'C'), 'Yes', 'No') AS Has_Letter_C
FROM my_table
GROUP BY Num
您的加入
,然后成为:
SELECT another_table.Num
FROM another_table LEFT JOIN my_table ON another_table.Num = my_table.Num
GROUP BY another_table.Num
HAVING my_table.Num IS NULL OR SUM(my_table.Letter = 'C') > 0
非常感谢。第一个有效。我将表达式更改为
IF(SUM(Letter='C')=COUNT(Letter),'Yes','No')
,因为我的实际示例需要检查所有Cs,我可以应用它来实现完整的查询。(这可能也是我重构和规范化我的表的时候了…@KenY-N:为了检查它们是否都是C
,查找任何不是C:SUM(字母“C”)的值会更简单。
。