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

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

Δημοσ.

Καλησπέρα παιδια,

 

μετα απο 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 για να το επιστρέψει; Και η πιο αποδοτική βεβαια.

 

Ευχαριστω.

 

 

Δημοσ.

Πως γινεται να μου επιστρεψει το παρακάτω:

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.

 

Σοβαρά τώρα, θα πεις με ποιά λογική προκύπτει το αποτέλεσμα που θες ή να εξασκήσουμε τις μαντικές δυνάμεις;

Δημοσ.

Θέλω για το κάθε country_id να πάρω την μικροτερη price.. Και αυτο να γινεται για καθε product_id. Οπως στο αρχικό παραδειγμα.

 

Defacer, αυτο που εγραψα ηταν παραδειγμα.. Η απαντηση σου δεν νομιζω να εχει σχεση.. Για στατικο πινακα κανει αλλα οχι για δυναμικο.

Ή αν δεν καταλαβα κατι σωστα, μπορει να κανω λαθος, καθως το 1 as country_id κλπ πρωτη φορα το βλεπω.

 

Η πρωτη ερωτηση του φιλου ηταν καπως κατατοπιστική αλλα με τοσα joins που χρησιμοποιησα για να φτιαξω τον αρχικο πινακα δυσκολευομαι να το χρησιμοποιησω. 

Δημοσ.

Δοκίμασε το παρακάτω

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
);
  • Like 1
Δημοσ.

Μόλις έτρεξα το παρακάτω και έπαιξε σωστά

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

post-66997-0-05385900-1484767905_thumb.png

Δημοσ.

Θέλω για το κάθε 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.

  • Like 1
Δημοσ.

Ειστε θυρια ρε μαγκες.. Τελικα το εβγαλα, αν και δυσκολευτηκα καθως για να καταληξω στον πινακα αυτον εκανα πολλα join και καπου το εχανα.. Το προσπάθησα οπως ο NickSym και ο Tsofras και βγηκε. Σας κερναω μπυρα, ευχαριστω για την βοηθεια  B)

 

 

 

Defacer, για την ιστορια, το seller_id δεν χρειαζεται πουθενα.. μπορει να ηταν πλεονασμος που το εγραψα.. Ακομα η query σου δεν βγαζει τα αναμενομενα αποτελεσματα.. Χρειαζεται αναγκαστηκα και μια sub-query. Διορθωσε με αν κανω λαθος.

Δημοσ.

Defacer, για την ιστορια, το seller_id δεν χρειαζεται πουθενα.. μπορει να ηταν πλεονασμος που το εγραψα.. Ακομα η query σου δεν βγαζει τα αναμενομενα αποτελεσματα.. Χρειαζεται αναγκαστηκα και μια sub-query. Διορθωσε με αν κανω λαθος.

 

Κάνεις λάθος. Το δοκίμασες;

 

http://sqlfiddle.com/#!9/cc011/2/0

 

Στεναχωριέμαι γιατί ιδανικά θα έπρεπε να μπορείς να καταλάβεις ότι αυτό ακριβώς είναι που σου χρειάζεται, αν όχι μόνος σου τουλάχιστον διαβάζοντας το έτοιμο.

  • Like 2
Δημοσ.

Ειστε θυρια ρε μαγκες.. Τελικα το εβγαλα, αν και δυσκολευτηκα καθως για να καταληξω στον πινακα αυτον εκανα πολλα join και καπου το εχανα.. Το προσπάθησα οπως ο NickSym και ο Tsofras και βγηκε. Σας κερναω μπυρα, ευχαριστω για την βοηθεια B)

 

 

 

Defacer, για την ιστορια, το seller_id δεν χρειαζεται πουθενα.. μπορει να ηταν πλεονασμος που το εγραψα.. Ακομα η query σου δεν βγαζει τα αναμενομενα αποτελεσματα.. Χρειαζεται αναγκαστηκα και μια sub-query. Διορθωσε με αν κανω λαθος.

Ο πλεονασμός για το seller_id αλλάζει όλο το query από το απλό του defacer στα πολύπλοκα :)

 

Υ. Γ. Ωραίο site defacer δεν το είχα πάρει πρέφα μπράβο

Δημοσ.

Ο πλεονασμός για το seller_id αλλάζει όλο το query από το απλό του defacer στα πολύπλοκα :)

 

Όχι μόνο αυτό αλλά είναι πάρα πολύ συζητήσιμο το αν έχει κανένα νόημα το seller_id όπως παρουσιάζεται στο παράδειγμα. Η μοναδική περίπτωση που καλύπτει όπως παρουσιάστηκε είναι "και θέλω να μάθω ένα τυχαίο seller_id από όσους πουλάνε στη χαμηλότερη τιμή". Όχι όλους, όχι τον "πρώτο" ή "καλύτερο" με κάποιο κριτήριο, έναν τυχαίο seller. Αδυνατώ να φανταστώ περίπτωση όπου αυτό είναι χρήσιμο στην πράξη.

 

Επίσης το example dataset θα έπρεπε να έχει λάβει ήδη υπόψη το σενάριο "πολλοί sellers στην ίδια χαμηλότερη τιμή", π.χ. το query του NickSym θα δώσει πολλές rows για κάθε product σ' αυτή την περίπτωση.

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

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

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

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

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

Σύνδεση

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

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