代码之家  ›  专栏  ›  技术社区  ›  Dipak

SUM()对行计数两次并显示双结果

  •  0
  • Dipak  · 技术社区  · 6 年前

    为什么? SUM() 对行计数两次并在此处显示实际结果的两倍?

    status 的值为0 发票编号 inv_id.s_id

    它必须表现出来 4 基于中的行号 发票 8 .

    如果 fee.id GROUP_BY 然后显示实际的总和,但相同的学生id开始重复。

    - SQL Fiddle

    id  |   ttl
    ===========
    1   |   One
    2   |   Two
    

    部分

    id  |   ttl
    ===========
    1   |   A
    2   |   B
    

    费用

    id  |   ttl
    ===============
    1   |   Annual
    2   |   Monthly
    

    id  |   ttl |   cls |   sec
    ===========================
    1   |   John|   1   |   1
    2   |   Paul|   1   |   1
    3   |   Rina|   2   |   1
    

    证券交易费

    id  |   c_id|   s_id|   f_id|   fee
    ===================================
    1   |   1   |   1   |   1   |   1000
    2   |   2   |   1   |   2   |   560
    

    发票编号

    id  |   s_id|   ft_id   |   status
    ==================================
    1   |   1   |   1       |   0
    2   |   1   |   2       |   0
    3   |   1   |   3       |   0
    4   |   1   |   4       |   0
    

    Mysql数据库

        SELECT
            student.id, student.ttl AS stdt, 
            cls.ttl AS cls, 
            sec.ttl AS sec,
            GROUP_CONCAT(DISTINCT fee.id, '.', fee.ttl, '-', sec_fee.fee,'<br/>' ORDER BY sec_fee.f_id) AS amnt,
            SUM(inv_id.status=0) AS upad,
            SUM(inv_id.status=1) AS pad
        FROM
            student
        JOIN
            cls ON cls.id=student.cls
        LEFT JOIN
            sec ON sec.id=student.sec
        LEFT JOIN
            inv_id ON inv_id.s_id = student.id
        LEFT JOIN
            sec_fee ON sec_fee.c_id = student.cls
        LEFT JOIN
            fee ON fee.id = sec_fee.f_id
        WHERE
            cls.id = 1
    
    0 回复  |  直到 6 年前