Requête SQL impliquant le groupe et rejoint par
Je ne pouvais pas être plus précis dans le titre de la partie mais je veux faire quelque chose d'un peu complexe pour moi. J'ai pensé que je l'ai fait mais il s'est avéré que c'est buggé.
J'ai trois tables comme suit:
ProjectTable
- idProject
- titre
- identifiant propriétaire
OfferTable
- idOffer
- idProject
- idAccount
AccountTable
- idAccount
- Nom d'utilisateur
Maintenant dans une requête je veux la liste de tous les projets avec la plupart des offres, et dans la requête je tiens également à obtenir des détails comme le nom d'utilisateur du propriétaire, nom d'utilisateur de l'offreur* etc. Donc je n'ai pas de requête pour chaque projet.
Voici ma cassé la requête, c'est ma première expérience avec un GROUPE et je n'a sans doute pas tout à fait le faire.
SELECT Project.addDate,Project.idOwner ,Account.Username,Project.idProject,
Project.Price,COUNT(Project.idProject) as offercount
FROM Project
INNER JOIN Offer
ON Project.idProject= Offer.idProject
INNER JOIN Account
ON Account.idAccount = Project.idOwner
GROUP BY Project.addDate,Project.idOwner,
Account.Username,Project.idProject,Project.Price
ORDER BY addDate DESC
*:J'ai écrit sans réfléchir, j'essayais juste de venir avec un exemple supplémentaire de l'information, qui est dénuée de sens grâce à Hosam Aly.
OriginalL'auteur EralpB | 2012-09-17
Vous devez vous connecter pour publier un commentaire.
Essayez ceci (modifié pour les projets avec des offres):
COUNT(o.idOffer)
, depuis que nous sommes en train de comptage propose, non pas dans des projets.juste des sons.
Cette requête retourne des projets avec 0 offre? J'ai changé cela dans mes noms de table, mais je ne suis pas sûr si j'ai fait une erreur ou cette requête ne les montrent pas. J'ai changé deux derniers types de jointure à
FULL and LEFT
, maintenant, je suis NULLE quand il est à zéro. Il n'est pas un problème et facile à fixer avec le code, mais j'aimerais savoir ce que changeriez-vous pour faire de ces Zéros zéros.J'ai édité la requête pour vous.
OriginalL'auteur Mike Perrenoud
Je pourrais basculer la requête légèrement à ceci:
De cette façon, vous obtenez le
count
par leprojectid
et ne repose pas sur tous les autres champs sont le regroupement. Je suis également à l'aide d'unLEFT JOIN
dans le cas de laprojectid
ou d'autres id n'existe pas dans les autres tableaux, vous pourrez toujours retourner des données.OriginalL'auteur Taryn
Votre question est un peu vague, mais voici quelques conseils:
ORDER BY offercount
.GROUP BY Project.idProject
d'abord avant les autres champs.Une sous-requête peut être faite soit dans le
FROM
clause, comme suggéré par d'autres réponses, ou directement dans leSELECT
alinéa, comme suit:OriginalL'auteur Hosam Aly