GROUP BY not for empty strings
You can use UNION and use it to get the wanted result.
Instead of WHERE email = '' you can use WHERE email IS NULL, if the column doesn't have '' as text


CREATE TABLE example (
  id INT NOT NULL AUTO_INCREMENT Primary KEY,
  fullname VARCHAR(100) NOT NULL,
  email VARCHAR(100) NOT NULL,
  something VARCHAR(255) NOT NULL
);




INSERT INTO example (id, fullname, email, something) VALUES
  (1, 'Name 1', 'name1@example.com', 'Something 1'),
  (2, 'Name 2', '', 'Something 2'),
  (3, 'Name 1', 'name1@example.com', 'Something 3'),
  (4, 'Name 3', 'name3@example.com', 'Something 4'),
  (5, 'Name 3', 'name3@example.com', 'Something 5'),
  (6, 'Name 4', '', 'Something 6');




SELECT GROUP_CONCAT(DISTINCT fullname), email 
FROM example 
WHERE email &lt;&gt; ''
GROUP BY email 
UNION
SELECT fullname, email 
FROM example 
WHERE email = ''
ORDER BY email;


GROUP_CONCAT(DISTINCT fullname) | email            
:------------------------------ | :----------------
Name 2                          |                  
Name 4                          |                  
Name 1                          | name1@example.com
Name 3                          | name3@example.com




SELECT GROUP_CONCAT(DISTINCT fullname), email 
FROM example 
GROUP BY email 


GROUP_CONCAT(DISTINCT fullname) | email            
:------------------------------ | :----------------
Name 2,Name 4                   |                  
Name 1                          | name1@example.com
Name 3                          | name3@example.com


db&lt;&gt;fiddle here