Junior
Ανάλυση επισκεψιμότητας σε γυμναστήρια Εργάζεστε ως αναλυτής σε ένα δίκτυο γυμναστηρίων. Έχετε πληροφορίες σχετικά με τις επισκέψεις χρηστών και τις συνδρομές που αγοράζουν. Είναι απαραίτητο να αναλύσετε την αποτελεσματικότητα της χρήσης των συνδρομών. Υπολογίστε για κάθε τύπο συνδρομής: • τον συνολικό αριθμό χρηστών που χρησιμοποίησαν αυτόν τον τύπο συνδρομής. Λαμβάνοντας υπόψη μόνο μοναδικά user_id; • τον συνολικό αριθμό επισκέψεων για αυτήν τη συνδρομή. Λαμβάνοντας υπόψη όλες τις επισκέψεις χρηστών με αυτήν τη συνδρομή; • το ποσοστό χρηστών αυτής της συνδρομής επί του συνολικού αριθμού χρηστών (στρογγυλοποιημένο σε ένα δεκαδικό). Για τον υπολογισμό, χρησιμοποιήστε τη σχέση μεταξύ του αριθμού χρηστών με αυτήν τη συνδρομή και του συνολικού αριθμού μοναδικών χρηστών. Κάθε χρήστης μπορεί να έχει μόνο μία συνδρομή. Τα αποτελέσματα ταξινομήστε κατά τύπο συνδρομής σε αλφαβητική σειρά. Μορφή εισόδου Πίνακας memberships: • membership_id (int) — μοναδικός αναγνωριστικός αριθμός συνδρομής • user_id (int) — μοναδικός αναγνωριστικός αριθμός χρήστη • membership_type (text) — τύπος συνδρομής Πίνακας visits: • visit_id (int) — μοναδικός αναγνωριστικός αριθμός επίσκεψης • user_id (int) — αναγνωριστικός αριθμός χρήστη • visit_date (timestamp) — ημερομηνία και ώρα επίσκεψης Τα δεδομένα δεν περιέχουν κενά ή λανθασμένες τιμές. Μορφή εξόδου Το ερώτημα πρέπει να επιστρέφει έναν πίνακα με τα πεδία με την ακόλουθη σειρά: • membership_type (text) — τύπος συνδρομής • users_count (int) — αριθμός μοναδικών χρηστών με αυτόν τον τύπο συνδρομής • total_visits (int) — συνολικός αριθμός επισκέψεων αυτών των χρηστών • user_share (numeric) — ποσοστό χρηστών αυτού του τύπου συνδρομής επί του συνολικού αριθμού, στρογγυλοποιημένο σε ένα δεκαδικό Τα αποτελέσματα ταξινομημένα κατά τύπο συνδρομής σε αλφαβητική σειρά.
sobes.tech AI
Απάντηση από AI
sql WITH user_counts AS ( SELECT membership_type, COUNT(DISTINCT user_id) AS users_count FROM memberships GROUP BY membership_type ),
total_users AS ( SELECT COUNT(DISTINCT user_id) AS total FROM memberships ),
visits_count AS ( SELECT m.membership_type, COUNT(v.visit_id) AS total_visits FROM visits v JOIN memberships m ON v.user_id = m.user_id GROUP BY m.membership_type )
SELECT uc.membership_type, uc.users_count, COALESCE(vc.total_visits, 0) AS total_visits, ROUND((uc.users_count::numeric / t.total) * 100, 1) AS user_share FROM user_counts uc JOIN total_users t ON true LEFT JOIN visits_count vc ON uc.membership_type = vc.membership_type ORDER BY uc.membership_type;