1

私のMySQLテーブルは

 htno     name       fathername       subcode      subject       internals     externals     total    result      tempcr
 12      Mahesh        Rajesh           256         Maths           20            55           75        P           1
 12      Mahesh        Rajesh           257        Science          18            60           78        P           1
 12      Mahesh        Rajesh           256         Maths           20            55           75        P           1
 12      Mahesh        Rajesh           257        Science          18            60           78        P           1

表に重複する行があります

私が必要とする出力は

HTNO     TOTAL MARKS SECURED       PERCENTAGE       TOTAL SUBJECTS       SUBJECTS ATTEMPTED      SUBJECTS ABSENT         SUBJECTS PASSED        BACKLOGS
12               153                   76.5%             2                      2                       0                    2                       0

私が得ている出力は

HTNO     TOTAL MARKS SECURED       PERCENTAGE       TOTAL SUBJECTS       SUBJECTS ATTEMPTED      SUBJECTS ABSENT         SUBJECTS PASSED        BACKLOGS
12               306                   153%              4                      4                       0                    4                       0

これは実際の計算の 2 倍です

この計算で重複行を除外したい

ヒントを教えてください

4

2 に答える 2

4

試す

SELECT htno, 
       SUM(total)               tech, 
       ROUND(SUM(total) / 2, 2) divi, 
       SUM(tempcr)              cred, 
       SUM(tempcr <= 0)         log,
       SUM(tempcr >  0)         pass, 
       SUM(externals >= 0)      atm, 
       SUM(externals <  0)      tot
  FROM 
( 
  SELECT DISTINCT * 
    FROM Table1 
   WHERE htno = 12
) q

出力:

| | HTNO | 技術 | ディビ | 信用 | ログ | パス | ATM | トット |
-------------------------------------------------- ----
| | 12 | 153 | 76.5 | 2 | 0 | 2 | 2 | 0 |

これがSQLFiddleのデモです

于 2013-07-19T08:05:28.040 に答える
0

GROUP_BY または DISTINCT を使用します。

$sum = $db->prepare("
    SELECT htno, 
    SUM(total) AS tech, 
    ROUND(SUM(total)/7.5, 2) AS divi, 
    SUM(tempcr) AS cred, 
    SUM(CASE WHEN tempcr <= 0 THEN 1 ELSE 0 END) AS log,
    SUM(CASE WHEN tempcr > 0 THEN 1 ELSE 0 END) AS pass, 
    SUM(CASE WHEN externals >= 0 THEN 1 ELSE 0 END) AS atm, 
    SUM(CASE WHEN externals >= -2 THEN 1 ELSE 0 END) AS tot 
    FROM btech32r09july2013 
    WHERE htno = :id 
    GROUP_BY subject"
);
于 2013-07-19T07:49:19.213 に答える