Mysql 此查询的有效语法是什么?

Mysql 此查询的有效语法是什么?,mysql,syntax,Mysql,Syntax,我试图对一个字段求和,如果条件字段id重复,它将仅计为1,而应用id等于1 SELECT SUM(IF(PU.field_id IS DISTINCT AND PU.app_id =1,1,0)) as "With Reco" FROM tbl.PutUser. 我知道对一些人来说这只是小菜一碟。我们可以使用MySQL特有的IF()函数 SELECT COUNT(DISTINCT IF(pu.app_id=1,pu.field_id,NULL)) AS `With Reco` F

我试图对一个字段求和,如果条件字段id重复,它将仅计为1,而应用id等于1

   SELECT SUM(IF(PU.field_id IS DISTINCT AND PU.app_id =1,1,0)) as "With Reco" FROM tbl.PutUser.

我知道对一些人来说这只是小菜一碟。

我们可以使用MySQL特有的
IF()
函数

 SELECT COUNT(DISTINCT IF(pu.app_id=1,pu.field_id,NULL)) AS `With Reco`
   FROM mytable pu
或等效的、更符合ANSI标准的
CASE
表达式

 SELECT COUNT(DISTINCT CASE WHEN pu.app_id=1 THEN pu.field_id END)
要在我们要测试的条件不满足时返回NULL,否则返回表达式(
field\u id
),我们需要获得满足条件时的不同值计数。然后,我们可以将表达式包装为
COUNT(DISTINCT)
aggregate

对于测试,删除计数(不同的)聚合,并返回单个行

SELECT pu.app_id
     , pu.field_id
     , IF(pu.app_id=1,pu.field_id,NULL) AS foo
  FROM mytable pu 
 ORDER BY ...
 LIMIT 80
这是我对你所问问题的最好理解

 app_id  field_id  foo 
 ------  --------  -----
 1       sam       sam
 0       sam       NULL
 1       sam       sam
 2       bob       NULL
 NULL    bugs      NULL

如果这不是你要问的,考虑提供一些样本数据,以及你的查询的预期输出。

我想你应该用样本数据和期望的结果来问另一个问题。样本数据和预期输出会更好地说明你所要达到的目标。完美,正是我所期待的。