Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

Îåêßíçóå áðü ôï ìÝëïò sakis_drm. Τελευταία δημοσίευση από το μέλος Antonios Chatzipavlis στις 31-01-2010, 21:28. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  31-01-2010, 15:20 56829

    MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Έχω τον πίνακα
    CREATE TABLE [dbo].[sailors](
        [id] [int] NULL,
        [name] [nvarchar](50) NULL,
        [rating] [int] NULL,
        [age] [int] NULL
    ) ON [PRIMARY]
    Μπορεί κάποιος να καταλάβει γιατί το where cluase και συγκεκριμένα το FROM temp στο παρακάτω ερώτημα επιστρέφει το μήνυμα λάθους?
    Μηπως δεν υποστηρίζεται κάτι τέτοιο απο τον SQL SERVER ?

    SELECT   temp.rating, temp.avgage
    FROM     (SELECT  s.rating , AVG(s.age) AS avgage
              FROM    sailors s
              GROUP BY s.rating) AS temp
    WHERE    temp.avgage = (SELECT   MIN(temp.avgage) FROM temp )

    Msg 208, Level 16, State 1, Line 1
    Invalid object name 'temp'.

    Επιπλέον, στην περίπτωση που αυτό φέρει αποτέλεσμα ποιά είναι διαφορά σε σχέση με το :

    SELECT   temp.rating, MIN(temp.avgage)
    FROM     (SELECT  s.rating rating, AVG(s.age) AS avgage
              FROM    sailors s
              GROUP BY s.rating) AS temp
    GROUP BY  temp.rating

    εμένα μου φαίνεται το ίδιο


  •  31-01-2010, 16:22 56833 σε απάντηση της 56829

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Χμ, φαίνεται οτι στο subquery εδω:

    WHERE    temp.avgage = (SELECT   MIN(temp.avgage) FROM temp )

    δεν αναγνωρίζεται ο πίνακας temp. Και καλά κάνει, μια και το subquery δεν μπορεί να ξέρει τι έχεις κάνει εσύ παραπάνω. Ο μόνος τρόπος να αναγνωριστεί ένα named result set εκεί είναι είτε με common table expressions, είτε με table variables είτε με temporary tables.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  31-01-2010, 16:23 56834 σε απάντηση της 56829

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Δες λίγο αυτό και αυτό και πιστεύω ότι θα καταλάβεις το γιατι δεν σου δουλεύει
    Antonios Chatzipavlis

  •  31-01-2010, 16:29 56835 σε απάντηση της 56834

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    και να δεν κάνω λάθος στην εκτίμηση μου για το τι θέλεις να πάρεις αυτό πρέπει να είναι το query σου το οποίο όμως θα πρέπει να το ελεγξεις για την αποδοση του

    SELECT s.rating , AVG(s.age) AS avgage

    FROM sailors s

    GROUP BY s.rating

    having AVG(s.age) = (SELECT MIN(age) FROM sailors )


    Antonios Chatzipavlis

  •  31-01-2010, 17:11 56839 σε απάντηση της 56835

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    το ερώτημα που δίνεις δεν βγάζει αποτελέσματα.
    Αυτό γιατι συγκρίνεις τον μέσο όρο ηλικίας της ομάδας με τη μικρότερη ηλικία (ούτε καν της ομάδας αλλά) όλου του πίνακα.

    Eπίσης διάβασα αυτά που μου έδειξες, το πρώτο ήταν γνωστό για τη λογική σειρά εκτέλεσης, ενώ το δεύτερο είχε θεματα optimize.
    Το optimize δεν με απασχολεί για το συγκεκριμένο θέμα. Μόνο το τελικό αποτέλεσμα. Thanks!

  •  31-01-2010, 17:19 56840 σε απάντηση της 56839

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Όπως σου είπα και πριν σου έδωσα ένα query με το πως το εξέλαβα από τα δεδομένα που έδωσες. Πες μας τι ακριβώς θέλεις να πάρεις και θα σε βοηθήσουμε να το πάρεις

     


    Antonios Chatzipavlis

  •  31-01-2010, 17:20 56841 σε απάντηση της 56840

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Στο δεύτερο μιλάω για την χρήση των subqueries
    Antonios Chatzipavlis

  •  31-01-2010, 20:00 56842 σε απάντηση της 56841

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Το ερώτημα ψαχνει το rating στο οποίο ο μέσος όρο ηλικίας είναι ο μικρότερος.

  •  31-01-2010, 21:08 56844 σε απάντηση της 56842

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Εάν είναι μόνο αυτό και θέλεις μόνο μια εγγραφή να πάρεις πίσω τότε νομίζω ότι αυτό θα σου κάνει

    SELECT top(1) s.rating , AVG(s.age) AS avgage

    FROM sailors s

    GROUP BY s.rating

    order by 2 asc


    Antonios Chatzipavlis

  •  31-01-2010, 21:23 56846 σε απάντηση της 56844

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Antonios Chatzipavlis:

    SELECT top(1) s.rating , AVG(s.age) AS avgage

    FROM sailors s

    GROUP BY s.rating

    order by 2 asc



    Σωστό και απλό. Thanks!

  •  31-01-2010, 21:28 56847 σε απάντηση της 56846

    Απ: MSSQL 2008 - Εμφωλευμένο ερώτημα με group by και where clause

    Να είσαι καλά! Big Smile


    Antonios Chatzipavlis

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems