Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

Το παρακάτω δεν το έχω ελέγξει από άποψη εγκυρότητας, αλλά συντακτικά είναι σωστό (βγάζει αποτελέσματα).

Αντιθέτως αυτό που παραθέτεις πιο πάνω, έχει συντακτικό λάθος (βάζεις σε παρένθεση την εξωτερική 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;

Δημοσ.

Δυστυχώς πρέπει να είναι μόνο μία 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. Που μπαίνουν όμως;

Δημοσ.

Μπορείτε να βοηθήσετε μήπως με τα group by για να τα γρουπάρουμε με βάση το jobid;

 

ευχαριστώ πολύ

  • Moderators
Δημοσ.

Πέρα από το ότι θέλεις μια select -για λόγους που δεν καταλαβαίνω, αυτό που παρέθεσα παραπάνω δεν κάνει αυτό που θέλεις;

 

Αν ναι, τότε μπορείς να βγάλεις τα βοηθητικά tables που φτιάχνω και να τα περάσεις "inline" στο τελικό select.

 

Βέβαια θα βγει ένα query σκέτο αίσχος (για αυτό δεν μπαίνω καν στη διαδικασία), αλλά θεωρητικά γίνεται.

Δημοσ.

Πέρα από το ότι θέλεις μια select -για λόγους που δεν καταλαβαίνω, αυτό που παρέθεσα παραπάνω δεν κάνει αυτό που θέλεις;

 

Αν ναι, τότε μπορείς να βγάλεις τα βοηθητικά tables που φτιάχνω και να τα περάσεις "inline" στο τελικό select.

 

Βέβαια θα βγει ένα query σκέτο αίσχος (για αυτό δεν μπαίνω καν στη διαδικασία), αλλά θεωρητικά γίνεται.

Σε ευχαριστώ πολύ, έχεις δίκιο, ωστόσο, όταν λες στο τελικό select ποιο εννοείς;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...