2015-10-25 17 views
0

我有以下查詢,我得到預期的結果:SUM多張國際單項體育聯合會

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'而不是其他人。 我知道這很容易,但我卡住了! 在此先感謝

回答

0

你必須這樣做在一個子查詢:

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. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. ORDER BY
  6. SELECT
+0

謝謝你的子查詢。我被困在subquery_alias .. :-) – dimoss

0

您可能做爲

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 ; 
1

你不做一個子查詢,儘管這是最常用的方法,這個工程太:

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表達式簡單地計算結果爲單個值,所以你可以直接在算術中使用它們。

+0

感謝這個替代解決方案!這在我的小mysql知識中增加了一個值! – dimoss

0

Pleae您可以通過這種簡單的方式嘗試 -

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;