Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 - Fatal编程技术网

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”)的值会更简单。