La sous-requête renvoie plus d'une ligne ??
â¦âââââââââââââââ¦ââââââââââââââ⦠â user_id â profit left â â âââââââââââââââ¬ââââââââââââââ⬠â 1 â 100 â â 1 â 30 â â 2 â 70 â â 2 â 20 â ââââââââââââââââ©âââââââââââââââ©
ââââââ¦âââââââââââââââ¦âââââââââââââ¦ââââââââââââ⦠â id â user_id â profit leftâ department â â âââââ¬âââââââââââââââ¬âââââââââââââ¬ââââââââââââ⬠â 1 â 1 â 100 â 1 â â 2 â 2 â 50 â 1 â â 3 â 1 â 30 â 2 â â 4 â 2 â 20 â 1 â â 5 â 2 â 20 â 3 â ââââââ©âââââââââââââââ©âââââââââââââ©âââââââââââââ©
et le tableau ci-dessous est ce que je veux réaliser
SELECT
`employee`.`employee_id` AS `employee_id`,
(
SELECT
SUM(company.company_profit_left)
FROM
company
GROUP BY
company.employee_id,
company.employee_department
) AS profit_left
FROM
employee
LEFT JOIN `company` ON `company`.`employee_id` = `employee`.`employee_id`
GROUP BY
`employee`.`employee_id`
HAVING
SUM(
company.company_profit_left
) = 0
c'est pourquoi je pensais avoir besoin utiliser group by pour distinguer user_id
J'ai déjà regardé
La sous-requête renvoie plus d'une ligne - MySQL
mais ne comprend toujours pas.
En joignant deux tables différentes, j'obtiens le tableau ci-dessous .
Quelqu'un peut-il m'aider à résoudre le problème?
3 Réponses :
Je pense que vous voulez une sous-requête corrélée. Je ne suis pas sûr de ce que vous faites vraiment, mais cela devrait corriger votre erreur:
(SELECT SUM(company.company_profit_left) FROM company c WHERE c.employee_id = e.employee_id ) AS profit_left
Vous voudrez peut-être plutôt cela par service. Mais le fait est que l'agrégation n'est pas appropriée pour la sous-requête. Une clause de corrélation est appropriée.
désolé de vous avoir confus. J'ai dessiné le tableau pour une meilleure compréhension
Modifier: en fonction de la structure de la table et de la sortie requise, j'ai mis à jour la requête et supprimé where et jointure gauche indésirables.
Je ne sais pas ce que vous ' essayez de faire. Mais d'après ce que j'ai compris, j'ai corrigé votre requête:
SELECT
employee.employee_id AS employee_id,
profit_left.employee_department
profit_left.company_profit
FROM
employee
JOIN (
SELECT
company.employee_id,
company.employee_department,
SUM(company.company_profit_left) as company_profit
FROM company
GROUP BY company.employee_id,company.employee_department
) AS profit_left on employee.employee_id=profit_left.employee_id
Merci pour votre avis. J'ai ajouté des tableaux pour une meilleure compréhension. pensez-vous que je peux toujours utiliser group_by?
Il semble que votre demande était assez simple. Vous n'avez pas besoin de where ou ayant clause et jointure gauche . J'ai mis à jour ma requête. Vous devez afficher employee_department dans la sortie, car c'est ainsi que votre profit est divisé, c'est-à-dire employé et service.
Votre sous-requête regroupant tous les employés de la table de l'entreprise et non l'un d'entre eux. Vous devez mettre la condition where dans la sous-requête pour filtrer les enregistrements et pas besoin de regrouper en sous-requête.
merci pour ton idée. J'ai ajouté des tableaux pour vous aider à comprendre. dans ce cas, dois-je encore mettre la condition où?