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
子句中引用别名。
处理查询的顺序是
- 来自
- 哪里
- 分组依据
- 拥有
- 订购方式
- 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;
我有以下查询并且得到了预期的结果:
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
子句中引用别名。
处理查询的顺序是
- 来自
- 哪里
- 分组依据
- 拥有
- 订购方式
- 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;