flienky Δημοσ. 18 Ιανουαρίου 2017 Δημοσ. 18 Ιανουαρίου 2017 Καλησπέρα παιδια, μετα απο joins μερικων πινακων στην βαση δεδομένων, καταλήγουμε σε αυτον τον πινακα ----------------- | country_id | | price | | product_id | | seller_id | ----------------- Εστω πχ τα values: country_id price product_id seller_id 1 10 5 1 1 30 5 2 2 15 5 1 2 50 5 2 3 80 5 1 3 20 5 2 Πως γινεται να μου επιστρεψει το παρακάτω: country_id price product_id seller_id 1 10 5 1 2 15 5 1 3 20 5 2 Ποια ειναι η mysql query για να το επιστρέψει; Και η πιο αποδοτική βεβαια. Ευχαριστω.
anon667 Δημοσ. 18 Ιανουαρίου 2017 Δημοσ. 18 Ιανουαρίου 2017 Λογικά κάτι αντίστοιχο χρειάζεσαι όπως καταλαβαίνω: http://stackoverflow.com/questions/612231/how-can-i-select-rows-with-maxcolumn-value-distinct-by-another-column-in-sql
defacer Δημοσ. 18 Ιανουαρίου 2017 Δημοσ. 18 Ιανουαρίου 2017 Πως γινεται να μου επιστρεψει το παρακάτω: country_id price product_id seller_id 1 10 5 1 2 15 5 1 3 20 5 2 Ποια ειναι η mysql query για να το επιστρέψει; Και η πιο αποδοτική βεβαια. Ευχαριστω. Εεεε να θα κάνεις SELECT 1 as country_id, 10 as price, 5 as product_id, 1 as seller_id και μετά UNION SELECT. Σοβαρά τώρα, θα πεις με ποιά λογική προκύπτει το αποτέλεσμα που θες ή να εξασκήσουμε τις μαντικές δυνάμεις;
flienky Δημοσ. 18 Ιανουαρίου 2017 Μέλος Δημοσ. 18 Ιανουαρίου 2017 Θέλω για το κάθε country_id να πάρω την μικροτερη price.. Και αυτο να γινεται για καθε product_id. Οπως στο αρχικό παραδειγμα. Defacer, αυτο που εγραψα ηταν παραδειγμα.. Η απαντηση σου δεν νομιζω να εχει σχεση.. Για στατικο πινακα κανει αλλα οχι για δυναμικο. Ή αν δεν καταλαβα κατι σωστα, μπορει να κανω λαθος, καθως το 1 as country_id κλπ πρωτη φορα το βλεπω. Η πρωτη ερωτηση του φιλου ηταν καπως κατατοπιστική αλλα με τοσα joins που χρησιμοποιησα για να φτιαξω τον αρχικο πινακα δυσκολευομαι να το χρησιμοποιησω.
tsofras Δημοσ. 18 Ιανουαρίου 2017 Δημοσ. 18 Ιανουαρίου 2017 Ότι σου έγραψε ο anon αν δεις την απάντηση στο URL, απλά εσύ θες MIN αντί για το ΜΑΧ που έχει, και είσαι έτοιμος
NickSym Δημοσ. 18 Ιανουαρίου 2017 Δημοσ. 18 Ιανουαρίου 2017 Δοκίμασε το παρακάτω SELECT * FROM PRODUCTS p WHERE p.PRICE <= ALL ( SELECT p1.PRICE FROM PRODUCTS p1 WHERE p1.PRODUCT_ID = P.PRODUCT_ID AND P1.COUNTRY_ID = P.COUNTRY_ID ); 1
tsofras Δημοσ. 18 Ιανουαρίου 2017 Δημοσ. 18 Ιανουαρίου 2017 Μόλις έτρεξα το παρακάτω και έπαιξε σωστά SELECT sales.country_id,groupsales.minprice,sales.product_id,sales.seller_id FROM test.test2 sales INNER JOIN (SELECT country_id, MIN(price) AS minprice FROM test.test2 GROUP BY country_id) groupsales ON sales.country_id= groupsales.country_id AND sales.price = groupsales.minprice Δοκίμασε το παρακάτω SELECT * FROM PRODUCTS p WHERE p.PRICE <= ALL ( SELECT p1.PRICE FROM PRODUCTS p1 WHERE p1.PRODUCT_ID = P.PRODUCT_ID AND P1.COUNTRY_ID = P.COUNTRY_ID ); Και αυτό μια χαρά δουλεύει, ωραίος Nick , δουλεύω με DB2 εδώ και 8 χρόνια και δεν την έχω ξαναπετύχει αυτή την function
defacer Δημοσ. 18 Ιανουαρίου 2017 Δημοσ. 18 Ιανουαρίου 2017 Θέλω για το κάθε country_id να πάρω την μικροτερη price.. Και αυτο να γινεται για καθε product_id. Οπως στο αρχικό παραδειγμα. Άρα θέλεις για κάθε μοναδικό ζεύγος (country_id, product_id) να πάρεις τη μικρότερη price. Η φάση είναι λίγο σχετική με τα μαθηματικά εδώ: αν δε μπορείς να εκφράσεις σωστά αυτό που ψάχνεις, πιθανόν να μη το βρεις ποτέ. Λοιπόν αφού θέλεις αρχικά μοναδικά ζεύγη country_id, product id, αν υποθέσουμε ότι έχεις τον πίνακα όπως τον δίνεις (και κακώς το θέτεις έτσι γιατί δε μπορούμε να μιλήσουμε για το αν κάνεις τα πράγματα σωστά ώσπου να φτάσεις εκεί) θα πεις SELECT country_id, product_id, MIN(price) FROM whatever GROUP BY (country_id, product_id) Αυτό είναι ακριβώς αυτό που ζητάς παραπάνω αλλά διαφέρει από το αρχικό σου post επειδή εκεί λες και seller_id, που εδώ δεν το αναφέρεις καθόλου (γιατί?). Αυτομάτως είναι προφανές ότι... δεν είναι καθόλου προφανές ποιό θα είναι το seller_id, δεδομένου πως μπορεί πολλοί sellers να έχουν την ίδια χαμηλότερη τιμή. Επομένως σ' αυτό το σημείο είναι που χρειάζεται να ξεκαθαρίσεις ακόμα περισσότερο τι περιμένεις από το seller_id. Τα γράφω έτσι για να σου δείξω όχι τι SQL πρέπει να γράψεις αλλά πώς πρέπει να προσεγγίσεις το πρόβλημα. Defacer, αυτο που εγραψα ηταν παραδειγμα.. Η απαντηση σου δεν νομιζω να εχει σχεση.. Για στατικο πινακα κανει αλλα οχι για δυναμικο. Ή αν δεν καταλαβα κατι σωστα, μπορει να κανω λαθος, καθως το 1 as country_id κλπ πρωτη φορα το βλεπω. Γράφω κάτι χαζό για να σου δείξω ότι ask a silly question, get a silly answer. 1
flienky Δημοσ. 19 Ιανουαρίου 2017 Μέλος Δημοσ. 19 Ιανουαρίου 2017 Ειστε θυρια ρε μαγκες.. Τελικα το εβγαλα, αν και δυσκολευτηκα καθως για να καταληξω στον πινακα αυτον εκανα πολλα join και καπου το εχανα.. Το προσπάθησα οπως ο NickSym και ο Tsofras και βγηκε. Σας κερναω μπυρα, ευχαριστω για την βοηθεια Defacer, για την ιστορια, το seller_id δεν χρειαζεται πουθενα.. μπορει να ηταν πλεονασμος που το εγραψα.. Ακομα η query σου δεν βγαζει τα αναμενομενα αποτελεσματα.. Χρειαζεται αναγκαστηκα και μια sub-query. Διορθωσε με αν κανω λαθος.
defacer Δημοσ. 19 Ιανουαρίου 2017 Δημοσ. 19 Ιανουαρίου 2017 Defacer, για την ιστορια, το seller_id δεν χρειαζεται πουθενα.. μπορει να ηταν πλεονασμος που το εγραψα.. Ακομα η query σου δεν βγαζει τα αναμενομενα αποτελεσματα.. Χρειαζεται αναγκαστηκα και μια sub-query. Διορθωσε με αν κανω λαθος. Κάνεις λάθος. Το δοκίμασες; http://sqlfiddle.com/#!9/cc011/2/0 Στεναχωριέμαι γιατί ιδανικά θα έπρεπε να μπορείς να καταλάβεις ότι αυτό ακριβώς είναι που σου χρειάζεται, αν όχι μόνος σου τουλάχιστον διαβάζοντας το έτοιμο. 2
flienky Δημοσ. 21 Ιανουαρίου 2017 Μέλος Δημοσ. 21 Ιανουαρίου 2017 Ναι εχεις δικιο, εγω δεν το κοιταξα καλα. Ευχαριστω
tsofras Δημοσ. 21 Ιανουαρίου 2017 Δημοσ. 21 Ιανουαρίου 2017 Ειστε θυρια ρε μαγκες.. Τελικα το εβγαλα, αν και δυσκολευτηκα καθως για να καταληξω στον πινακα αυτον εκανα πολλα join και καπου το εχανα.. Το προσπάθησα οπως ο NickSym και ο Tsofras και βγηκε. Σας κερναω μπυρα, ευχαριστω για την βοηθεια Defacer, για την ιστορια, το seller_id δεν χρειαζεται πουθενα.. μπορει να ηταν πλεονασμος που το εγραψα.. Ακομα η query σου δεν βγαζει τα αναμενομενα αποτελεσματα.. Χρειαζεται αναγκαστηκα και μια sub-query. Διορθωσε με αν κανω λαθος. Ο πλεονασμός για το seller_id αλλάζει όλο το query από το απλό του defacer στα πολύπλοκα Υ. Γ. Ωραίο site defacer δεν το είχα πάρει πρέφα μπράβο
defacer Δημοσ. 21 Ιανουαρίου 2017 Δημοσ. 21 Ιανουαρίου 2017 Ο πλεονασμός για το seller_id αλλάζει όλο το query από το απλό του defacer στα πολύπλοκα Όχι μόνο αυτό αλλά είναι πάρα πολύ συζητήσιμο το αν έχει κανένα νόημα το seller_id όπως παρουσιάζεται στο παράδειγμα. Η μοναδική περίπτωση που καλύπτει όπως παρουσιάστηκε είναι "και θέλω να μάθω ένα τυχαίο seller_id από όσους πουλάνε στη χαμηλότερη τιμή". Όχι όλους, όχι τον "πρώτο" ή "καλύτερο" με κάποιο κριτήριο, έναν τυχαίο seller. Αδυνατώ να φανταστώ περίπτωση όπου αυτό είναι χρήσιμο στην πράξη. Επίσης το example dataset θα έπρεπε να έχει λάβει ήδη υπόψη το σενάριο "πολλοί sellers στην ίδια χαμηλότερη τιμή", π.χ. το query του NickSym θα δώσει πολλές rows για κάθε product σ' αυτή την περίπτωση.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα