Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες

Κόμβος πηγής: 1586233

Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες
 

Εισαγωγή

 
Εάν είστε έμπειρος επιστήμονας δεδομένων που ψάχνει για δουλειά, δεν θα μπορούσατε να είχατε επιλέξει καλύτερη στιγμή. Αυτήν τη στιγμή, πολλοί καθιερωμένοι οργανισμοί αναζητούν επιστήμονες δεδομένων που γνωρίζουν την τέχνη τους μέσα και έξω. Ωστόσο, η υψηλή ζήτηση δεν σημαίνει ότι μπορείτε ή πρέπει να πηδήξετε και να υποβάλετε αίτηση για ανώτερες θέσεις χωρίς συγκεκριμένο σύνολο δεξιοτήτων. Όταν προσλαμβάνουν έμπειρους επιστήμονες δεδομένων, οι εταιρείες αναμένουν από αυτούς να εργαστούν στα πιο δύσκολα καθήκοντα. Αυτοί οι υπάλληλοι θα πρέπει να έχουν καλή κατανόηση ακόμη και των πιο σκοτεινών χαρακτηριστικών, ώστε να μπορούν να τα χρησιμοποιούν όταν είναι απαραίτητο.

Δεν πρέπει να προκαλεί έκπληξη το γεγονός ότι όταν παίρνουν συνεντεύξεις για ανώτερες θέσεις, οι έμπειροι επιστήμονες δεδομένων τείνουν να γίνονται πολύ πιο δύσκολες ερωτήσεις. Συχνά, όταν εργάζονται σε μια μεμονωμένη εργασία για μερικά χρόνια, οι επιστήμονες δεδομένων γίνονται πολύ ικανοί στην εκτέλεση ορισμένων επαναλαμβανόμενων εργασιών. Είναι σημαντικό για τους επαγγελματίες να συνειδητοποιήσουν ότι η SQL δεν σταματά και δεν τελειώνει με τις υπάρχουσες γνώσεις τους. Όσον αφορά τις προηγμένες έννοιες της SQL, ενδέχεται να εξακολουθούν να υπάρχουν κάποια κενά στις γνώσεις τους. Επομένως, δεν βλάπτει να λάβετε βοήθεια για να πετύχετε στη συνέντευξη επιστήμονα δεδομένων. 

Η SQL είναι η κύρια γλώσσα για τη διαχείριση βάσεων δεδομένων, επομένως η εκτέλεση λειτουργιών SQL βρίσκεται στο επίκεντρο των εργασιών των επιστημόνων δεδομένων. Οι περισσότερες συνεντεύξεις επιστημόνων δεδομένων κανονίζονται για να προσδιοριστεί η γνώση του SQL ενός υποψηφίου. 

Η καθημερινή δουλειά μπορεί να μην περιλαμβάνει τη σύνταξη σύνθετων ερωτημάτων, αλλά πρέπει να δείξετε ότι εάν χρειάζονται τέτοιες δεξιότητες, είστε το άτομο που μπορεί να το κάνει. Επομένως, δεν πρέπει να προκαλεί έκπληξη το γεγονός ότι οι συνεντευκτής ζητούν ένα διαφορετικό σύνολο Ερωτήσεις συνέντευξης SQL για να ελέγξετε την ευχέρεια του υποψηφίου στην SQL.

Σε αυτό το άρθρο, θέλαμε να συνοψίσουμε μερικές από τις περίπλοκες ερωτήσεις και έννοιες που τέθηκαν σε συνεντεύξεις με έμπειρους επαγγελματίες. Ακόμα κι αν είστε σίγουροι για τις γνώσεις σας στην SQL, δεν βλάπτει να σαρώσετε τις λέξεις-κλειδιά και να βεβαιωθείτε ότι έχετε καλύψει τα πάντα.

Ελάχιστες ιδέες για έμπειρους επαγγελματίες

ΠΕΡΙΠΤΩΣΗ / ΠΟΤΕ

 
Η πλήρης κατανόηση της έννοιας του CASE (και της συνοδευτικής δήλωσης When) είναι απαραίτητη για την επίτευξη πλήρους γνώσης της SQL. Μια δήλωση case μας επιτρέπει να ελέγξουμε ορισμένες συνθήκες και να επιστρέψουμε μια τιμή με βάση το εάν αυτές οι συνθήκες αξιολογούνται ως αληθείς ή ψευδείς. Σε συνδυασμό με ρήτρες, όπως WHERE και ORDER BY, το CASE μας επιτρέπει να φέρουμε λογική, συνθήκες και σειρά στα ερωτήματά μας SQL.

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

Οι έμπειροι υποψήφιοι θα πρέπει να είναι προετοιμασμένοι να απαντήσουν σε θεωρητικές ερωτήσεις, όπως να εξηγήσουν τις διαφορές μεταξύ των δηλώσεων ΠΕΡΙΠΤΩΣΗΣ με αξία και αναζήτησης, πώς λειτουργούν και πώς να τις γράφουν. Αυτό απαιτεί ισχυρή κατανόηση της σύνταξης και των κοινών πρακτικών τους. Περιττό να πούμε ότι αυτό περιλαμβάνει επίσης τη σωστή χρήση της ρήτρας ELSE.

Οι έμπειροι επιστήμονες δεδομένων θα πρέπει να γνωρίζουν πώς να χρησιμοποιούν το CASE και με συναρτήσεις συγκεντρωτικών στοιχείων. Μπορεί επίσης να σας ζητηθεί να γράψετε μια συνοπτική δήλωση CASE, η οποία είναι λιγότερο επαναλαμβανόμενη και πιο κατανοητή. Θα πρέπει να είστε σε θέση να μιλάτε έξυπνα για προειδοποιήσεις και πιθανούς κινδύνους από τη χρήση συνοπτικών δηλώσεων ΠΕΡΙΠΤΩΣΗΣ.

Γενικά, ένας έμπειρος επιστήμονας δεδομένων πρέπει να μπορεί να χρησιμοποιεί CASE για να γράφει πιο αποτελεσματικά ερωτήματα. Εξάλλου, ολόκληρος ο σκοπός της δήλωσης CASE είναι να αποφευχθεί η σύνταξη πάρα πολλών μεμονωμένων ερωτημάτων για την ενοποίηση των δεδομένων.

Ακολουθεί ένα παράδειγμα της ερώτησης που μπορεί να λυθεί χρησιμοποιώντας δηλώσεις CASE / WHEN: https://platform.stratascratch.com/coding/9634-host-response-rates-with-cleaning-fees?python= 

Αυτή είναι μια δύσκολη ερώτηση που τίθεται στις συνεντεύξεις της Airbnb, όπου οι υποψήφιοι πρέπει να βρουν το μέσο ποσοστό απόκρισης του οικοδεσπότη, τον ταχυδρομικό κώδικα και την αντίστοιχη χρέωση καθαρισμού.

Σε αυτήν την περίπτωση, η πρόταση CASE/ WHEN χρησιμοποιείται για τη μορφοποίηση του αποτελέσματος ως αριθμό και την παρουσίασή του ως ποσοστιαία τιμή, εκτός από τον ταχυδρομικό κώδικα.

SQL Joins

 
Είναι εύκολο να αισθάνεστε σίγουροι για τις γνώσεις σας για τις εγγραφές SQL, αλλά όσο περισσότερο εξερευνάτε αυτό το θέμα, τόσο περισσότερα θα ανακαλύπτετε ότι δεν γνωρίζετε. Οι συνεντεύξεις ρωτούν συχνά ερωτήσεις συνέντευξης σχετικά με προηγμένες πτυχές του SQL Joins που συχνά παραβλέπονται. Επομένως, είναι σημαντικό να εμβαθύνουμε σε αυτήν την έννοια και να την κατακτήσουμε διεξοδικά.
 
Εκτός από τις βασικές έννοιες, οι συνεντευξιακοί μπορεί να ρωτήσουν τι είναι οι αυτοδιασταυρωμένες συνδέσεις και να ανακαλύψουν το βάθος των γνώσεών σας ζητώντας να λύσουν πρακτικές ερωτήσεις. Θα πρέπει να γνωρίζετε όλους τους διαφορετικούς τύπους συνδέσεων, συμπεριλαμβανομένων των πιο περίπλοκων τύπων, όπως οι ενώσεις κατακερματισμού ή οι σύνθετες ενώσεις. Θα μπορούσατε επίσης να σας ζητηθεί να εξηγήσετε τι είναι οι φυσικές ενώσεις και πότε είναι οι πιο χρήσιμες. Μερικές φορές θα πρέπει να εξηγήσετε τις διαφορές μεταξύ φυσικών και εσωτερικών ενώσεων.
 
Θα πρέπει, γενικά, να έχετε εμπεριστατωμένη εμπειρία και γνώση στη χρήση συνδέσεων σε συνδυασμό με άλλες δηλώσεις για να επιτύχετε τα επιθυμητά αποτελέσματα. Για παράδειγμα, θα πρέπει να ξέρετε πώς να χρησιμοποιείτε την ρήτρα WHERE για να χρησιμοποιήσετε το Cross Join σαν να ήταν Inner Join. Θα πρέπει επίσης να γνωρίζετε πώς να χρησιμοποιείτε συνδέσεις για την παραγωγή νέων πινάκων χωρίς να ασκείτε υπερβολική πίεση στον διακομιστή. Ή πώς να χρησιμοποιήσετε τις εξωτερικές συνδέσεις για να αναγνωρίσετε και να συμπληρώσετε τις τιμές που λείπουν κατά την υποβολή ερωτημάτων στη βάση δεδομένων. Ή η εσωτερική λειτουργία των εξωτερικών ενώσεων, όπως το γεγονός ότι η αναδιάταξη της σειράς τους μπορεί να αλλάξει την έξοδο. 

Ακολουθεί ένα παράδειγμα της ερώτησης που περιλαμβάνει τη σύνταξη μιας εσωτερικής κοινής δήλωσης

Αυτή είναι μια αρκετά δύσκολη ερώτηση, όπου οι υποψήφιοι καλούνται να εμφανίσουν το μέγεθος της παραγγελίας ως ποσοστό των συνολικών δαπανών.
 
 

Advanced Concept N1: Date-time Manipulation

 
Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες
 

Είναι σύνηθες οι βάσεις δεδομένων να περιλαμβάνουν ημερομηνίες και ώρες, επομένως κάθε έμπειρος επιστήμονας δεδομένων θα πρέπει να έχει βαθιά γνώση της συνεργασίας μαζί τους. Αυτός ο τύπος δεδομένων μας επιτρέπει να παρακολουθούμε τη σειρά με την οποία συμβαίνουν τα γεγονότα, τις αλλαγές στη συχνότητα, τον υπολογισμό των διαστημάτων και την απόκτηση άλλων σημαντικών πληροφοριών. Πολλές φορές η εκτέλεση αυτών των λειτουργιών απαιτεί πλήρη γνώση του χειρισμού ημερομηνίας-ώρας στην SQL. Έτσι, οι επαγγελματίες με ένα τέτοιο σύνολο δεξιοτήτων θα έχουν ένα πλεονέκτημα έναντι των ανταγωνιστών υποψηφίων. Εάν δεν είστε 100% σίγουροι για τις ικανότητές σας, δείτε τις έννοιες που περιγράφονται παρακάτω και δείτε πόσες από αυτές ακούγονται γνωστές.

Δεδομένου ότι υπάρχουν πολλές διαφορετικές (αλλά έγκυρες) προσεγγίσεις για τη μορφοποίηση δεδομένων στην SQL, οι σπουδαίοι κωδικοποιητές θα πρέπει να είναι τουλάχιστον εξοικειωμένοι με όλες. Κατά τη διάρκεια των συνεντεύξεων, οι διευθυντές προσλήψεων αναμένουν γνώση των βασικών εννοιών μορφοποίησης δεδομένων και την ικανότητα να μιλάνε έξυπνα για την επιλογή της σωστής λειτουργίας για την εργασία. Αυτό περιλαμβάνει τη γνώση μιας σημαντικής συνάρτησης FORMAT() και τη σχετική σύνταξη για την πλήρη χρήση της συνάρτησης. Αναμένεται επίσης η γνώση άλλων βασικών συναρτήσεων, όπως η NOW(). Επίσης, δεν θα ήταν απροσδόκητο για έμπειρους επαγγελματίες να ερωτηθούν για βασικές έννοιες όπως τα δεδομένα χρονοσειρών και τον σκοπό τους.

Είναι επίσης σημαντικό να λάβετε υπόψη το πλαίσιο της εργασίας για την οποία κάνετε αίτηση. Μια εταιρεία τεχνητής νοημοσύνης ή IoT θα ενδιαφέρεται περισσότερο για την παρακολούθηση των δεδομένων που συλλέγονται από τους αισθητήρες, ενώ μια εφαρμογή διαπραγμάτευσης μετοχών μπορεί να σας ζητήσει να παρακολουθείτε τις διακυμάνσεις των τιμών κατά τη διάρκεια της ημέρας, της εβδομάδας ή του μήνα.

Σε ορισμένες περιπτώσεις, οι εργοδότες ενδέχεται να ρωτήσουν για πιο προηγμένες συναρτήσεις ημερομηνίας/ώρας στην SQL, όπως CAST(), EXTRACT() ή DATE_TRUNC(). Αυτές οι λειτουργίες μπορεί να είναι ανεκτίμητες όταν εργάζεστε με μεγάλο όγκο δεδομένων που περιέχουν ημερομηνίες. Ένας έμπειρος επιστήμονας δεδομένων θα πρέπει να γνωρίζει τον σκοπό κάθε λειτουργίας και τις εφαρμογές της. Σε ένα ιδανικό σενάριο, θα πρέπει να έχει εμπειρία χρήσης τους στο παρελθόν.

Ο πιο περίπλοκος χειρισμός ημερομηνίας-ώρας στην SQL θα περιλαμβάνει τον συνδυασμό βασικών και προηγμένων λειτουργιών. Επομένως, είναι απαραίτητο να τις γνωρίζετε όλες, ξεκινώντας από τις πιο βασικές FORMAT(), NOW(), CURRENT_DATE και CURRENT_TIME, και συμπεριλαμβανομένων των πιο προηγμένων συναρτήσεων που αναφέρονται παραπάνω. Ως έμπειρος επιστήμονας δεδομένων, θα πρέπει επίσης να γνωρίζετε τι κάνει το INTERVAL και πότε να το χρησιμοποιείτε.

Ακολουθεί ένα παράδειγμα μιας ερώτησης που τέθηκε σε συνεντεύξεις στην Airbnb, όπου οι υποψήφιοι πρέπει να χρησιμοποιήσουν τα διαθέσιμα δεδομένα για να παρακολουθήσουν την ανάπτυξη της Airbnb.
 
 

Η εγκατάσταση:

 
Σε αυτήν την ερώτηση, οι υποψήφιοι καλούνται να παρακολουθήσουν την ανάπτυξη της Airbnb με βάση τις αλλαγές στον αριθμό των οικοδεσποτών που εγγράφονται κάθε χρόνο. Με άλλα λόγια, θα χρησιμοποιήσουμε τον αριθμό των πρόσφατα εγγεγραμμένων κεντρικών υπολογιστών ως δείκτη ανάπτυξης για κάθε έτος. Θα βρούμε τον ρυθμό ανάπτυξης υπολογίζοντας τη διαφορά στον αριθμό των κεντρικών υπολογιστών μεταξύ του προηγούμενου και του τρέχοντος έτους και διαιρώντας αυτόν τον αριθμό με τον αριθμό των κεντρικών υπολογιστών που καταχωρήθηκαν κατά το προηγούμενο έτος. Στη συνέχεια, θα βρούμε την ποσοστιαία τιμή πολλαπλασιάζοντας το αποτέλεσμα επί 100.

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

Λύση:

 
Για να απαντήσει σε αυτήν την ερώτηση, ένας υποψήφιος πρέπει να εργαστεί με τον πίνακα που ονομάζεται "airbnb_search_details", ο οποίος περιλαμβάνει πολλές στήλες. Η στήλη που χρειαζόμαστε ονομάζεται "host_since", η οποία υποδηλώνει το έτος, τον μήνα και την ημέρα κατά την οποία ο οικοδεσπότης εγγράφηκε για πρώτη φορά στον ιστότοπο. Για αυτήν την άσκηση, ο μήνας και η ημέρα είναι άσχετοι, επομένως το πρώτο πράγμα που θα πρέπει να κάνουμε είναι να εξαγάγουμε το έτος από την τιμή. Στη συνέχεια, θα πρέπει να δημιουργήσουμε μια προβολή που θα περιλαμβάνει ξεχωριστές στήλες για το τρέχον έτος, το προηγούμενο έτος και τον συνολικό αριθμό κεντρικών υπολογιστών εκείνο το έτος. 

Επιλέξτε απόσπασμα(έτος ΑΠΟ host_since::DATE) FROM airbnb_search_details ΟΠΟΥ ο host_since ΔΕΝ ΕΙΝΑΙ NULL

Μέχρι στιγμής, έχουμε κάνει δύο πράγματα:

  1. Έχουμε φροντίσει να συμπεριλάβουμε μόνο τις σειρές όπου η στήλη host_since δεν είναι κενή.
  2. Εξάγαμε το έτος από τα δεδομένα και το μεταδώσαμε ως τιμή DATE.
Επιλέξτε απόσπασμα(έτος ΑΠΟ host_since::DATE) count(id) ως current_year_host ΑΠΟ airbnb_search_details ΟΠΟΥ host_since ΔΕΝ ΕΙΝΑΙ NULL GROUP BY απόσπασμα(έτος FROM host_since::DATE) ORDER BY year asc

Στη συνέχεια προχωράμε στην καταμέτρηση των αναγνωριστικών και ρυθμίζουμε την ρήτρα GROUP BY για κάθε έτος. Και κάντε το να εμφανίζεται με αύξουσα σειρά. 

Αυτό θα μας δώσει έναν πίνακα με δύο στήλες: το έτος και τον αριθμό των κεντρικών υπολογιστών που έχουν εγγραφεί εκείνο το έτος. Δεν έχουμε ακόμα μια πλήρη εικόνα που χρειάζεται για να λύσουμε το ερώτημα, αλλά είναι ένα βήμα προς τη σωστή κατεύθυνση. Χρειαζόμαστε επίσης ξεχωριστές στήλες για κεντρικούς υπολογιστές που εγγράφηκαν κατά τη διάρκεια του προηγούμενου έτους. Εδώ μπαίνει η συνάρτηση LAG().

SELECT Year, current_year_host, LAG(current_year_host, 1) OVER (ORDER BY BY) ως prev_year_host Επιλέξτε απόσπασμα(έτος FROM host_since::DATE) count(id) ως current_year_host FROM airbnb_search_details WHERE host_since ΔΕΝ ΕΙΝΑΙ NOT_NULL κεντρικός υπολογιστής :DATE) ΠΑΡΑΓΓΕΛΙΑ ΑΝΑ έτος αυξ

Εδώ, προσθέσαμε την τρίτη στήλη, η οποία θα φέρει την ετικέτα "prev_year_host" και οι τιμές της θα προέρχονται από το "current_year_host", εκτός από την καθυστέρηση μιας σειράς. Δείτε πώς μπορεί να μοιάζει:

Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες
 

Η διάταξη του πίνακα με αυτόν τον τρόπο καθιστά πολύ βολικό τον υπολογισμό του τελικού ρυθμού ανάπτυξης. Έχουμε ξεχωριστή στήλη για κάθε τιμή στην εξίσωση. Τελικά, ο κώδικάς μας θα πρέπει να μοιάζει κάπως έτσι:

SELECT έτος, τρέχον_year_host, prev_year_host, round(((current_year_host - prev_year_host)/(cast(prev_year_host AS numeric))*100) εκτιμώμενος_ανάπτυξη FROM (SELECT έτος, τρέχον_year_host, LAG(current_year_year_host, BV_ORDERY) FROM (SELECT απόσπασμα(έτος FROM host_since::date) AS έτος, count(id) current_year_host FROM airbnb_search_details WHERE host_since ΔΕΝ ΕΙΝΑΙ NULL GROUP BY απόσπασμα(έτος FROM host_since::date) ORDER BY BY) t1) t1

Εδώ, προσθέτουμε ένα άλλο ερώτημα και μια άλλη στήλη όπου υπολογίζουμε τον ρυθμό ανάπτυξης. Πρέπει να πολλαπλασιάσουμε το αρχικό αποτέλεσμα επί 100 και να το στρογγυλοποιήσουμε για να ικανοποιήσουμε τις απαιτήσεις της εργασίας. 

Αυτή είναι η λύση σε αυτό το έργο. Είναι σαφές ότι οι λειτουργίες χειρισμού ημερομηνίας-ώρας ήταν απαραίτητες για την ολοκλήρωση της εργασίας. 
 
 

Προηγμένη έννοια N2: Λειτουργίες παραθύρου και κατατμήσεις

 
Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες
 

Λειτουργίες παραθύρου SQL είναι μια από τις πιο σημαντικές έννοιες για τη σύνταξη σύνθετων, αλλά αποτελεσματικών ερωτημάτων SQL. Οι έμπειροι επαγγελματίες αναμένεται να έχουν βαθιά πρακτική και θεωρητική γνώση των λειτουργιών παραθύρων. Αυτό περιλαμβάνει τη γνώση της ρήτρας υπέρβασης και τον έλεγχο της χρήσης της. Οι συνεντεύξεις μπορεί να ρωτήσουν πώς η ρήτρα OVER μπορεί να μετατρέψει τις συγκεντρωτικές συναρτήσεις σε συναρτήσεις παραθύρου. Μπορεί επίσης να ερωτηθείτε για τις τρεις συγκεντρωτικές συναρτήσεις που μπορούν να χρησιμοποιηθούν ως συναρτήσεις παραθύρου. Οι έμπειροι επιστήμονες δεδομένων θα πρέπει να γνωρίζουν και άλλες, μη συγκεντρωτικές λειτουργίες παραθύρου.

Για την καλύτερη χρήση των συναρτήσεων παραθύρου, πρέπει επίσης να γνωρίζουμε τι είναι η ρήτρα PARTITION BY και πώς να τη χρησιμοποιήσετε. Μπορεί να σας ζητηθεί να το εξηγήσετε και να δώσετε παραδείγματα μερικών περιπτώσεων χρήσης. Μερικές φορές θα πρέπει να οργανώσετε σειρές μέσα σε κατατμήσεις χρησιμοποιώντας τον όρο ORDER_BY.

Οι υποψήφιοι που μπορούν να επιδείξουν ενδελεχή γνώση κάθε μεμονωμένης λειτουργίας παραθύρου, όπως η ROW_NUMBER() θα έχουν ένα πλεονέκτημα. Περιττό να πούμε ότι η θεωρητική γνώση από μόνη της δεν είναι αρκετή – οι επαγγελματίες θα πρέπει επίσης να έχουν εμπειρία στη χρήση τους στην πράξη, με ή χωρίς διαμερίσματα. Για παράδειγμα, ένας έμπειρος επαγγελματίας θα πρέπει να μπορεί να εξηγήσει τις διαφορές μεταξύ RANK() και DENSE_RANK(). Ένας ιδανικός υποψήφιος θα πρέπει να γνωρίζει μερικές από τις πιο προηγμένες έννοιες, όπως πλαίσια μέσα σε κατατμήσεις, και να μπορεί να τις εξηγήσει με σαφήνεια.

Οι σπουδαίοι υποψήφιοι θα πρέπει επίσης να εξηγήσουν τη χρήση της συνάρτησης NTH_VALUE(). Δεν θα ήταν κακό να αναφέρουμε τις εναλλακτικές σε αυτήν τη συνάρτηση, όπως οι συναρτήσεις FIRST_VALUE() και LAST_VALUE(). Στις εταιρείες αρέσει συχνά να μετρούν τεταρτημόρια, ποσοστά και εκατοστημόρια γενικά. Για να εκτελέσουν αυτή τη λειτουργία, οι επιστήμονες δεδομένων πρέπει επίσης να γνωρίζουν πώς να χρησιμοποιούν τη συνάρτηση παραθύρου NTILE().

Στην SQL, υπάρχουν συνήθως πολλοί τρόποι προσέγγισης μιας εργασίας. Ωστόσο, οι λειτουργίες παραθύρου παρέχουν τον ευκολότερο τρόπο εκτέλεσης κοινών, αλλά πολύπλοκων λειτουργιών. Ένα καλό παράδειγμα μιας τέτοιας συνάρτησης παραθύρου είναι η LAG() ή η LEAD(), επομένως θα πρέπει να είστε εξοικειωμένοι με αυτές. Για παράδειγμα, ας δούμε ένα παράδειγμα από την προηγούμενη λύση σε μια δύσκολη ερώτηση συνέντευξης στην Airbnb:

Για να εμφανίσουμε τον αριθμό των κεντρικών υπολογιστών το προηγούμενο έτος, χρησιμοποιήσαμε τη συνάρτηση LAG() με την πρόταση OVER. Αυτό θα μπορούσε να γίνει με πολλούς άλλους τρόπους, αλλά οι συναρτήσεις παραθύρου μας επέτρεψαν να λάβουμε το επιθυμητό αποτέλεσμα σε μία μόνο γραμμή κώδικα SQL:

LAG(current_year_host, 1) OVER (ORDER BY BY) ως prev_year_host

Πολλές εταιρείες πρέπει να υπολογίσουν την ανάπτυξη για μια συγκεκριμένη χρονική περίοδο. Η συνάρτηση LAG() μπορεί να είναι ανεκτίμητη για την ολοκλήρωση τέτοιων εργασιών.
 
 

Προηγμένη ιδέα N3: Ανάπτυξη από μήνα σε μήνα

 
Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες
 

Πολλοί οργανισμοί χρησιμοποιούν ανάλυση δεδομένων για να μετρήσουν τη δική τους απόδοση. Αυτό μπορεί να συνεπάγεται τη μέτρηση της αποτελεσματικότητας των εκστρατειών μάρκετινγκ ή της απόδοσης επένδυσης σε μια συγκεκριμένη επένδυση. Η εκτέλεση μιας τέτοιας ανάλυσης απαιτεί μια εις βάθος γνώση της SQL, όπως η ημερομηνία, η ώρα και οι συναρτήσεις παραθύρου.

Οι επιστήμονες δεδομένων θα πρέπει επίσης να αποδείξουν τις ικανότητές τους στη μορφοποίηση των δεδομένων και την εμφάνισή τους ως ποσοστά ή σε οποιαδήποτε άλλη μορφή. Γενικά, για να λύσετε τις πρακτικές ερωτήσεις όπου πρέπει να υπολογίσετε την ανάπτυξη από μήνα σε μήνα, πρέπει να χρησιμοποιήσετε το συνδυασμό πολλαπλών συνόλων δεξιοτήτων. Ορισμένες από τις απαιτούμενες έννοιες θα είναι προηγμένες (συναρτήσεις παραθύρου, χειρισμός ημερομηνίας-ώρας), ενώ άλλες θα είναι βασικές (αθροιστικές συναρτήσεις και κοινές δηλώσεις SQL).

Ας δούμε ένα παράδειγμα ερώτησης που έκαναν οι Interviewers στο Amazon.

Η εγκατάσταση:

 
Σε αυτήν την ερώτηση, πρέπει να εργαστούμε με έναν πίνακα αγορών και να υπολογίσουμε τη μηνιαία αύξηση ή μείωση των εσόδων. Το τελικό αποτέλεσμα πρέπει να μορφοποιηθεί με συγκεκριμένο τρόπο (μορφή ΕΕΕΕ-ΜΜ) και τα ποσοστά να στρογγυλοποιηθούν στο δεύτερο πλησιέστερο δεκαδικό. 

Λύση:

 
Όταν εργάζεστε σε μια εργασία όπως αυτή, το πρώτο πράγμα που πρέπει να κάνετε είναι να κατανοήσετε τον πίνακα. Θα πρέπει επίσης να προσδιορίσετε τις στήλες με τις οποίες πρέπει να εργαστείτε για να απαντήσετε στην ερώτηση. Και πώς θα είναι η παραγωγή σας.

Στο παράδειγμά μας, οι τιμές δεδομένων έχουν τον τύπο αντικειμένου, επομένως θα πρέπει να χρησιμοποιήσουμε τη συνάρτηση CAST() για να τις μετατρέψουμε σε τύπους ημερομηνίας.

SELECT to_char(cast(created_at as date), 'YYYY-MM') FROM sf_transactions

Η ερώτηση καθορίζει επίσης μια μορφή για τις ημερομηνίες, ώστε να μπορούμε να χρησιμοποιήσουμε τη συνάρτηση theTO_CHAR() στην SQL για να εξάγουμε την ημερομηνία σε αυτήν τη μορφή.

Για να υπολογίσουμε την ανάπτυξη, θα πρέπει επίσης να επιλέξουμε τη συγκεντρωτική συνάρτηση create_at και SUM() για να λάβουμε τον όγκο των συνολικών πωλήσεων για εκείνη την ημερομηνία. 

SELECT to_char(cast(created_at as date), 'YYYY-MM'), create_at, sum(value) FROM sf_transactions

Σε αυτό το σημείο, πρέπει να χρησιμοποιήσουμε ξανά τις συναρτήσεις παραθύρου. Συγκεκριμένα, θα χρησιμοποιήσουμε τη συνάρτηση LAG() για να αποκτήσουμε πρόσβαση στον τόμο του προηγούμενου μήνα και να τον εμφανίσουμε ως ξεχωριστή στήλη. Για αυτό, θα χρειαστούμε επίσης μια ρήτρα OVER.

SELECT to_char(cast(created_at as date), 'YYYY-MM') AS year_month, create_at, sum(value) lag(sum(value), 1) OVER (ORDER BY create_at::date) FROM sf_transactions GROUP BY create_at

Με βάση τον κώδικα που έχουμε γράψει μέχρι τώρα, ο πίνακας μας θα μοιάζει κάπως έτσι:

Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες
 

Εδώ, έχουμε τις ημερομηνίες και τις αντίστοιχες συνολικές τιμές στη στήλη αθροίσματος και τις τιμές της τελευταίας ημερομηνίας στη στήλη υστέρηση. Τώρα μπορούμε να συνδέσουμε τις τιμές στον τύπο και να εμφανίσουμε τον ρυθμό ανάπτυξης σε ξεχωριστή στήλη.

Θα πρέπει επίσης να αφαιρέσουμε την περιττή στήλη δημιουργήθηκε_στο και να αλλάξουμε τις ρήτρες GROUP BY και ORDER BY σε year_month.

SELECT to_char(cast(created_at as date), 'YYYY-MM') AS year_month, sum(value), lag(sum(value), 1) OVER (ORDER BY to_char(cast(created_at as date)) FROM sf_transactions GROUP BY έτος_μήνας

Μόλις εκτελέσουμε τον κώδικα, ο πίνακας μας θα πρέπει να περιλαμβάνει μόνο τις στήλες που είναι απαραίτητες για τον υπολογισμό μας.

Ερωτήσεις συνέντευξης SQL για έμπειρους επαγγελματίες
 

Τώρα μπορούμε επιτέλους να φτάσουμε στη λύση. Δείτε πώς θα μοιάζει ο τελικός κώδικας:

SELECT to_char(created_at::date, 'YYYY-MM') AS year_month, round(((sum(value)) - lag(sum(value), 1) OVER w) / (lag(sum(value), 1) OVER w)) * 100, 2) AS έσοδα_diff_pct ΑΠΟ sf_transactions GROUP BY year_month WINDOW w AS ( ORDER BY to_char(created_at::date, 'YYYY-MM')) ORDER BY year_month ASC


 

Σε αυτόν τον κώδικα, παίρνουμε δύο τιμές στηλών από το προηγούμενο παράδειγμα και υπολογίζουμε τη διαφορά μεταξύ τους. Σημειώστε ότι χρησιμοποιούμε επίσης ψευδώνυμα παραθύρου για να μειώσουμε την επαναληψιμότητα του κώδικά μας.

Στη συνέχεια, σύμφωνα με τον αλγόριθμο, το διαιρούμε με τα έσοδα του τρέχοντος μήνα και το πολλαπλασιάζουμε επί 100 για να πάρουμε την ποσοστιαία τιμή. Τέλος, στρογγυλοποιούμε την ποσοστιαία τιμή σε δύο δεκαδικά ψηφία. Φτάνουμε στην απάντηση που ικανοποιεί όλες τις απαιτήσεις της εργασίας. 

Advanced Concept N4: Ποσοστά ανατροπής

 
Παρόλο που είναι το αντίθετο της ανάπτυξης, η ανατροπή είναι επίσης μια σημαντική μέτρηση. Πολλές εταιρείες παρακολουθούν τα ποσοστά ανατροπής τους, ειδικά εάν το επιχειρηματικό τους μοντέλο βασίζεται σε συνδρομές. Με αυτόν τον τρόπο, μπορούν να παρακολουθούν τον αριθμό των χαμένων συνδρομών ή λογαριασμών και να προβλέψουν τους λόγους που το προκάλεσαν. Ένας έμπειρος επιστήμονας δεδομένων αναμένεται να γνωρίζει ποιες συναρτήσεις, δηλώσεις και ρήτρες θα χρησιμοποιήσει για τον υπολογισμό των ρυθμών εκτροπής.

Τα δεδομένα συνδρομής είναι πολύ ιδιωτικά και περιέχουν ιδιωτικές πληροφορίες χρήστη. Είναι επίσης σημαντικό για τους επιστήμονες δεδομένων να γνωρίζουν πώς να εργάζονται με τέτοια δεδομένα χωρίς να τα εκθέτουν. Συχνά, ο υπολογισμός των ρυθμών ανατροπής περιλαμβάνει κοινές εκφράσεις πίνακα, οι οποίες είναι μια σχετικά νέα έννοια. Οι καλύτεροι επιστήμονες δεδομένων πρέπει να γνωρίζουν γιατί τα CTE είναι χρήσιμα και πότε να τα χρησιμοποιούν. Όταν εργάζεστε με παλαιότερες βάσεις δεδομένων, όπου τα CTE δεν είναι διαθέσιμα, ένας ιδανικός υποψήφιος θα πρέπει να μπορεί να ολοκληρώσει τη δουλειά.

Εδώ είναι ένα παράδειγμα μιας δύσκολης εργασίας. Οι υποψήφιοι που παίρνουν συνέντευξη στη Lyft λαμβάνουν αυτήν την εργασία για να υπολογίσουν το ποσοστό ανατροπής των οδηγών στην εταιρεία.

Για να λύσουν αυτό το πρόβλημα, οι επιστήμονες δεδομένων πρέπει να χρησιμοποιήσουν προτάσεις case/when, συναρτήσεις παραθύρου όπως η LAG(), καθώς και FROM / WHERE και άλλες βασικές ρήτρες. 

Συμπέρασμα

 
Η εργασία ως επιστήμονας δεδομένων για πολλά χρόνια φαίνεται σίγουρα εντυπωσιακή σε ένα βιογραφικό σημείωμα και θα σας πάρει πολλές συνεντεύξεις. Ωστόσο, μόλις μπείτε στην πόρτα, θα πρέπει να επιδείξετε τη γνώση για να συμπληρώσετε την πολυετή εμπειρία σας. Ακόμα κι αν έχετε μεγάλη εμπειρία σε γράφοντας ερωτήματα σε SQL, δεν βλάπτει η χρήση πόρων όπως StrataScratch για να ανανεώσετε τις γνώσεις σας.

 
 
Νέιτ Ροσίδη είναι επιστήμονας δεδομένων και στη στρατηγική προϊόντων. Είναι επίσης επίκουρος καθηγητής που διδάσκει αναλυτικά και είναι ο ιδρυτής του StrataScratch, μια πλατφόρμα που βοηθά τους επιστήμονες δεδομένων να προετοιμαστούν για τις συνεντεύξεις τους με πραγματικές ερωτήσεις συνεντεύξεων από κορυφαίες εταιρείες. Συνδεθείτε μαζί του Twitter: StrataScratch or LinkedIn.

Πηγή: https://www.kdnuggets.com/2022/01/sql-interview-questions-experienced-professionals.html

Σφραγίδα ώρας:

Περισσότερα από KDnuggets