mysql如果column=x则选择行,否则column=0,不同

mysql如果column=x则选择行,否则column=0,不同,mysql,select,if-statement,Mysql,Select,If Statement,我正在使用MySQL,我想这是一个简单的问题。看起来是这样的: id | name | age ----------------- 2 | cde | 30 3 | abc | 30 4 | efg | 0 我有一张桌子: ----------------- id | name | age ----------------- 1 | abc | 0 2 | cde | 30 3 | abc | 30 4 | efg | 0 现在,我想选择姓名和年龄,但选择所有

我正在使用MySQL,我想这是一个简单的问题。看起来是这样的:

id | name | age 
-----------------
2  | cde  | 30
3  | abc  | 30
4  | efg  | 0
我有一张桌子:

-----------------
id | name | age 
-----------------
1  | abc  | 0
2  | cde  | 30
3  | abc  | 30
4  | efg  | 0
现在,我想选择姓名和年龄,但选择所有即将出现的条件: 如果有任何年龄为30岁的行,请选择该行,否则请选择年龄为0的行。如果同时存在30和0年龄(如上面的示例中所示),则只选择年龄为30的一行。如果只有年龄为0的行-选择它

使用上面的表格,我希望得到如下结果:

id | name | age 
-----------------
2  | cde  | 30
3  | abc  | 30
4  | efg  | 0
Mysql应该忽略年龄为0的第一行,因为有一行名称相同,但年龄为30。 我试过了

SELECT name, age FROM table WHERE CASE WHEN age = 30 THEN 1 ELSE age = 0 END
但它选择了多个年龄分别为0和30的行。
希望您能帮助我。

不确定这是否正是您想要的,但请测试一下,看看是否有效:)

玩弄

(SELECT id, name, age FROM myTable WHERE age = 30)

UNION

(SELECT id, name, age
FROM mytable
WHERE age = 0
  AND name NOT in(SELECT name FROM myTable WHERE age = 30)
ORDER BY id DESC)

使用op请求

选择。。。按年龄分组
?您能否再提供4个具有预期输出的样本行?还不确定您想要什么?是否只想要一行的年龄为0,并且每行的年龄为30?我只想要年龄为30且名称唯一的行。如果没有具有不同名称和年龄30的行,则选择名称和年龄0。换句话说,我只想为每个名称选择一行,只有在没有带年龄的名称时,才使用年龄030@MarcB按年龄分组不会产生OP想要的结果。。他需要筛选年龄和姓名。不幸的是,你的例子对我不起作用。请检查-id=5不应出现在结果中,因为已经有名为cde且年龄为30(id 2)的行进行了一些更改。现在,当名称为Equalu时,它会检查以过滤掉。这也不起作用-检查-它不会产生“eeg”行,尽管它只有0岁:(您不清楚自己想要什么。是否希望所有年龄为0且姓名与30岁不匹配的人都出现?据我所知,您只想要一个。您想要最近的一个?还是最老的一个?请澄清您想要什么并具体说明。@Kalreg好的,我只是将其更改了一些。查看一下,如果有帮助,请告诉我。我也会更新。)我不知道答案。