Работа COUNT в MySQL
Имеется таблица юзеров вида id (первичный ключ), name, lastname и таблица лайков вида from_user, to_user. Больше никаких индексов нет.
SELECT users.user_id AS ID,
CONCAT(users.user_name, ' ', users.user_lastname) AS 'User',
COUNT(DISTINCT l2.from_user) AS 'Likes received',
COUNT(DISTINCT l1.to_user) AS 'Likes delivered' FROM users
INNER JOIN likes AS l1 ON users.user_id = l1.from_user
INNER JOIN likes AS l2 ON users.user_id = l2.to_user
WHERE users.user_id = 3;
Вопрос. Почему не работает CONCAT, если выборка даст отсутствие результатов. Например, один пользователь не поставил никому лайк, а я по нему делаю выборку, то количество отправленных соответственно 0 и тогда COUNT ломается. Что можно сделать? В таблице likes оба поля с атрибутом UNIQUE, чтобы исключить возможность дважды лайкнуть другого юзера. Скрипты:
CREATE TABLE users ( user_id int NOT NULL AUTO_INCREMENT, user_name varchar(45) NOT NULL, user_lastname varchar(45) NOT NULL, PRIMARY KEY (user_id) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE likes ( from_user int NOT NULL, to_user int NOT NULL, UNIQUE KEY from_user_UNIQUE (to_user,from_user) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO social_network.users (user_name, user_lastname) VALUES ('name1', 'lastname1'), ('name2', 'lastname2'), ('name3', 'lastname3'), ('name4', 'lastname4'), ('name5', 'lastname5');
INSERT INTO social_network.likes (from_user, to_user) VALUES ('2', '1'), ('4', '1'), ('1', '2'), ('4', '2'), ('1', '3'), ('2', '3'), ('3', '4');