Il n'y a pas de clause group by, un seul enregistrement est renvoyé parmi eux, le nombre d'enregistrements requis est renvoyé ;
SELECT PM.id AS id, PM.email AS email, PM.name AS name, PM.mobile AS mobile, PM.country AS country, PM.status AS status, PM.cdate AS joined_date, PM.details_status AS details_status, PM.freeze AS freeze, PM.blacklist AS blacklist, PM.blacklist_remark AS blacklist_remark, PM.blacklist_adate AS blacklist_adate, MA.m_app_id AS app_id, MA.full_name AS replace_name, MAX(MA.ldate) AS ldate, MA.service_type AS svc_type FROM whatever_db.tw_person_merchant PM LEFT JOIN ( whatever_db.tw_person_merchant PMM INNER JOIN whatever_db.tw_merchant_application_details MA ON PMM.app_id = MA.m_app_id INNER JOIN whatever_db.tw_merchant_application MAP ON MA.m_app_id = MAP.id AND MAP.status NOT IN ('10' , '60') AND MA.id = (SELECT max(id) FROM whatever_db.tw_merchant_application_details WHERE m_app_id = PMM.app_id ) ) ON PM.app_id = MA.m_app_id WHERE PM.details_status IN ('90', '0') AND PM.blacklist = 0 AND PM.name != '' -- **here, without the group by clause, the result is just 1 record GROUP BY PM.id ORDER BY PM.id DESCJe teste si le script SQL renvoie les marchands concernés, mais un seul enregistrement est affiché au milieu. Après des essais répétés, le "group by" inséré a résolu ce problème. Mais ce « regroupement par » ne résume pas, mais montre plus de résultats que sans lui. Des résultats inattendus et une telle trahison de la raison.
Lorsque vous utilisez une fonction d'agrégation comme
GROUP BY
时,查询结果对于GROUP BY
表达式的每个不同值都有一行。在您的情况下,PM.id
的每个值占一行。诸如MAX()
, les résultats seront appliqués au sous-ensemble de lignes de chaque groupe associé à une valeur donnée.Si vous n'utilisez pas
GROUP BY
, le résultat est en fait un ensemble, donc la requête ne renvoie qu'une seule ligne. Toute fonction d'agrégation est appliquée à l'ensemble des lignes.https://dev.mysql.com/doc/refman /8.0/en/select.html Au fond de cette longue page contient cette phrase :