Q:

Subquery More Than One Row

i got a problem with my query. I will give my table data, i have 4 tabel: tutor, absen_user, absen, aktivitas
table tutor
| id_tutor | nama   | 
| 1        | budi   |
| 2        | Gerald |

table absen_user #this table as a bridge of various types of user tables
| id_absen_user | id_anak_or_tutor | type  |
| 1             | 1                | tutor |
| 2             | 2                | tutor |
| 3             | 3                | child |

table absen
| id_absen    | id_aktivitas | id_absen_user | absen |
| 1           | 1            | 1             | Hadir |
| 2           | 2            | 1             | Hadir | 
| 3           | 3            | 1             | No    |
| 4           | 4            | 1             | Hadir |
| 5           | 1            | 2             | no    | 
| 6           | 2            | 2             | No    |
| 7           | 3            | 2             | Hadir |
| 8           | 4            | 2             | no    |

table aktivitas
| id_aktivitas | tanggal    |     
| 1            | 2018-02-19 |
| 2            | 2018-02-20 |
| 3            | 2018-02-21 |
| 4            | 2018-03-01 |

then the result I want
| nama    | Februari |
| budi    | 67       |
| gerald  | 33       |

data in februari comes from the 'count(absen) with codition field 'Hadir' / count(absen) * 100' ... and this is my query 
SELECT nama,
       ifnull((
            SELECT ROUND(SUM(CASE absen
                            WHEN 'Hadir'
                                THEN 1
                            ELSE 0
                            END) / COUNT(absen) * 100)
            FROM (tutor)
            JOIN absen_user ON absen_user.id_anak_or_tutor = tutor.id_tutor
            JOIN absen ON absen.id_absen_user = absen_user.id_absen_user
            JOIN aktivitas ON aktivitas.id_aktivitas = absen.id_aktivitas
            WHERE (
                    (Month(aktivitas.tanggal) = 2)
                    AND (YEAR(aktivitas.tanggal) = 2018)
                    )
            GROUP BY tutor.nama
            ), 0) AS `Februari`
FROM tutor

and the error i get subquery return more than 1 row

A:

SELECT nama,
    ifnull((
            SELECT ROUND(SUM(CASE absen
                WHEN 'Hadir' THEN 1ELSE 0 END) / COUNT(*) * 100)
            FROM tutor t2
            JOIN absen_user ON absen_user.id_anak_or_tutor = tutor.id_tutor
            JOIN absen ON absen.id_absen_user = absen_user.id_absen_user
            JOIN aktivitas ON aktivitas.id_aktivitas = absen.id_aktivitas
            WHERE
                Month(aktivitas.tanggal) = 2
                AND YEAR(aktivitas.tanggal) = 2018
                AND t2.nama = tutor.nama
        ), 0) AS `Februari`
FROM tutor

What you appear to be doing is you wanted to see zeroes even where tutors had no data available for February. This is can be accomplished by outer joins.
SELECT nama,
    ROUND(SUM(
        CASE absen
            WHEN 'Hadir' THEN 1 ELSE 0 END)
             / COUNT(*) * 100) AS Februari
FROM absen_user
    JOIN absen ON absen.id_absen_user = absen_user.id_absen_user
    JOIN aktivitas ON aktivitas.id_aktivitas = absen.id_aktivitas
    RIGHT OUTER JOIN tutor ON absen_user.id_anak_or_tutor = tutor.id_tutor
WHERE
        Month(aktivitas.tanggal) = 2
        AND YEAR(aktivitas.tanggal) = 2018

