Moderators Praetorian Δημοσ. 4 Απριλίου 2012 Moderators Δημοσ. 4 Απριλίου 2012 Το παρακάτω δεν το έχω ελέγξει από άποψη εγκυρότητας, αλλά συντακτικά είναι σωστό (βγάζει αποτελέσματα). Αντιθέτως αυτό που παραθέτεις πιο πάνω, έχει συντακτικό λάθος (βάζεις σε παρένθεση την εξωτερική select χωρίς λόγο -και δεν βγάζει και νόημα). Anyway, η λογική παρακάτω μου φαίνεται σωστή. Αν σου πετάξει τα μυστήρια syntax error που για κάποιο λόγο δεν πετάει σε μένα, θα χρειαστεί να το αλλάξεις όπως καταλαβαίνεις. > DROP TABLE IF EXISTS tmp_MOperJobID; DROP TABLE IF EXISTS tmp_MOAboveMOperJobID; DROP TABLE IF EXISTS tmp_MOLowerMOperJobID; CREATE TABLE tmp_MOperJobID SELECT jobId, AVG(`candidate`.`observation`) AS genikosMOjid FROM `candidate` GROUP BY jobId; CREATE TABLE tmp_MOAboveMOperJobID SELECT m1.jobId, AVG(`candidate`.`observation`) AS MOAboveMOjid FROM tmp_MOperJobID m1 INNER JOIN `candidate` ON `candidate`.`jobId` = m1.`jobId` WHERE `candidate`.`observation` > m1.genikosMOjid GROUP BY jobId; CREATE TABLE tmp_MOLowerMOperJobID SELECT m1.jobId, AVG(`candidate`.`observation`) AS MOLowerMOjid FROM tmp_MOperJobID m1 INNER JOIN `candidate` ON `candidate`.`jobId` = m1.`jobId` WHERE `candidate`.`observation` < m1.genikosMOjid GROUP BY jobId; SELECT C1.jobId, T1.genikosMOjid, T2.MOAboveMOjid, T3.MOLowerMOjid, C1.observation, (Case When C1.observation > T2.MOAboveMOjid then 5 when (C1.observation <= T2.MOAboveMOjid and C1.observation > T1.genikosMOjid) then 4 when C1.observation = T1.genikosMOjid then 3 when C1.observation > T3.MOLowerMOjid then 2 else 1 END) AS FinalGrade FROM `candidate` C1 INNER JOIN `tmp_MOperJobID` T1 ON C1.`jobId` = T1.`jobId` INNER JOIN `tmp_MOAboveMOperJobID` T2 ON C1.`jobId` = T2.`jobId` INNER JOIN `tmp_MOLowerMOperJobID` T3 ON C1.`jobId` = T3.`jobId`; DROP TABLE IF EXISTS tmp_MOperJobID; DROP TABLE IF EXISTS tmp_MOAboveMOperJobID; DROP TABLE IF EXISTS tmp_MOLowerMOperJobID;
katina Δημοσ. 4 Απριλίου 2012 Μέλος Δημοσ. 4 Απριλίου 2012 Έστω και με μεταβλητές, πως μπορούμε να το κάνουμε; Ευχαριστώ πολύ!!
katina Δημοσ. 4 Απριλίου 2012 Μέλος Δημοσ. 4 Απριλίου 2012 Δυστυχώς πρέπει να είναι μόνο μία select χωρίς μεταβλητές! >select Case When (candidate.observation > (select AVG(`candidate`.`observation`) FROM `candidate` WHERE candidate.observation > (select AVG(`candidate`.`observation`) FROM `candidate`))) then 5 when (candidate.observation <= (select AVG(candidate.observation) from candidate where candidate.observation > (select AVG(candidate.observation) from candidate)) and (candidate.observation > (select AVG(candidate.observation) from candidate))) then 4 when candidate.observation = (select AVG(candidate.observation) from candidate) then 3 when candidate.observation > (select AVG(candidate.observation) from candidate where candidate.observation < (select AVG(candidate.observation) from candidate)) then 2 else 1 END AS FinalGrade2 FROM `candidate` Νομίζω ότι λείπουν μερικά group by jobid. Που μπαίνουν όμως;
katina Δημοσ. 7 Απριλίου 2012 Μέλος Δημοσ. 7 Απριλίου 2012 Μπορείτε να βοηθήσετε μήπως με τα group by για να τα γρουπάρουμε με βάση το jobid; ευχαριστώ πολύ
Moderators Praetorian Δημοσ. 7 Απριλίου 2012 Moderators Δημοσ. 7 Απριλίου 2012 Πέρα από το ότι θέλεις μια select -για λόγους που δεν καταλαβαίνω, αυτό που παρέθεσα παραπάνω δεν κάνει αυτό που θέλεις; Αν ναι, τότε μπορείς να βγάλεις τα βοηθητικά tables που φτιάχνω και να τα περάσεις "inline" στο τελικό select. Βέβαια θα βγει ένα query σκέτο αίσχος (για αυτό δεν μπαίνω καν στη διαδικασία), αλλά θεωρητικά γίνεται.
katina Δημοσ. 8 Απριλίου 2012 Μέλος Δημοσ. 8 Απριλίου 2012 Πέρα από το ότι θέλεις μια select -για λόγους που δεν καταλαβαίνω, αυτό που παρέθεσα παραπάνω δεν κάνει αυτό που θέλεις; Αν ναι, τότε μπορείς να βγάλεις τα βοηθητικά tables που φτιάχνω και να τα περάσεις "inline" στο τελικό select. Βέβαια θα βγει ένα query σκέτο αίσχος (για αυτό δεν μπαίνω καν στη διαδικασία), αλλά θεωρητικά γίνεται. Σε ευχαριστώ πολύ, έχεις δίκιο, ωστόσο, όταν λες στο τελικό select ποιο εννοείς;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα