SUM 查询中的多个 IF

SUM mulitple IFs in a query

我有以下查询并且得到了预期的结果:

    SELECT
      IF (a1>b1,'1','0') AS a1r,
      IF (a2>b2,'1','0') AS a2r,
      IF (a3>b3,'1','0') AS a3r,
      IF (a4>b4,'1','0') AS a4r,
      IF (a5>b5,'1','0') AS a5r,
      IF (a6>b6,'1','0') AS a6r,
      IF (a7>b7,'1','0') AS a7r,
      SUM(a1r+a2r+a3r+a4r+a5r+a6r+a7r) AS ar
      FROM fab_matches
      WHERE p1 = 12 AND p2 = 15;

但是我想生成一个查询(可能带有子查询)以仅获取 'ar' 的值而不是其他值。 我知道这很容易,但我被困住了! 提前致谢

您必须在子查询中执行此操作:

SELECT a1r, a2r, a3r, a4r, a5r, a6r, a7r,
a1r+a2r+a3r+a4r+a5r+a6r+a7r AS ar
FROM (
  SELECT
  IF (a1>b1,'1','0') AS a1r,
  IF (a2>b2,'1','0') AS a2r,
  IF (a3>b3,'1','0') AS a3r,
  IF (a4>b4,'1','0') AS a4r,
  IF (a5>b5,'1','0') AS a5r,
  IF (a6>b6,'1','0') AS a6r,
  IF (a7>b7,'1','0') AS a7r /*you have to change the alias here, since you already used it in the first line*/
  FROM fab_matches
  WHERE p1 = 12 AND p2 = 15
) subquery_alias;

您不能在同一个 SELECT 子句中引用别名。

处理查询的顺序是

  1. 来自
  2. 哪里
  3. 分组依据
  4. 拥有
  5. 订购方式
  6. SELECT

您可以按照

select 
  SUM(a1r+a2r+a3r+a4r+a5r+a6r+a7r) AS ar
  from (
   SELECT
   IF (a1>b1,'1','0') AS a1r,
   IF (a2>b2,'1','0') AS a2r,
   IF (a3>b3,'1','0') AS a3r,
   IF (a4>b4,'1','0') AS a4r,
   IF (a5>b5,'1','0') AS a5r,
   IF (a6>b6,'1','0') AS a6r,
   IF (a7>b7,'1','0') AS a1r
   FROM fab_matches
   WHERE p1 = 12 AND p2 = 15
 )x ;

不必在子查询中执行此操作,尽管这是最常用的方法,但也可以:

SELECT
    IF (a1>b1,'1','0')
  + IF (a2>b2,'1','0')
  + IF (a3>b3,'1','0')
  + IF (a4>b4,'1','0')
  + IF (a5>b5,'1','0')
  + IF (a6>b6,'1','0')
  + IF (a7>b7,'1','0')  AS ar
FROM fab_matches
WHERE p1 = 12 AND p2 = 15;

这些 IF 表达式中的每一个都简单地计算为单个值,因此您可以直接在算术中使用它们。

请你用这个简单的方法试试 -

SELECT 
SUM(IF(a1>b1,'1','0')+IF(a2>b2,'1','0')+IF(a3>b3,'1','0')+IF(a4>b4,'1','0')+IF(a5>b5,'1','0')+IF(a6>b6,'1','0')+IF(a7>b7,'1','0')) AS ar
FROM fab_matches
WHERE p1 = 12 AND p2 = 15;