Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   SQL SUM & MAX (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5548-sql-sum-max.html)

parara 28-05-20 01:15

SQL SUM & MAX
 
Καλημέρα,

από τον πίνακα salary

id name salaryt

2 Dionisis 22000
3 Vasilis 27000
2 Dionisis 19000
1 Kostas 11000
3 Vasilis 17000

πως μπορώ να πάρω την μεγαλύτερη τιμή από το άθροισμα των ομοίων id
στο παραπάνω παράδειγμα να έχω
Dionisis 41000


ευχαριστώ

kapetang 28-05-20 12:36

Καλημέρα


Θα μπορούσες να χρησιμοποιήσεις ένα ερώτημα με την παρακάτω μορφή:


Κώδικας:

SELECT TOP 1 tbl.Id, tbl.fname, Sum(tbl.salaryt) AS sumSal
FROM tbl
GROUP BY tbl.Id, tbl.fname
ORDER BY Sum(tbl.salaryt) DESC;


parara 28-05-20 12:43

Ευχαριστώ
 
Ευχαριστώ,

μπορείς να μου εξηγήσεις τον ρόλο της DESC.

εγώ προσπαθούσα να το κάνω με την max

kapetang 28-05-20 13:55

Ταξινομεί τις εγγραφές σε φθίνουσα σειρά ως προς τα αθροίσματα (από το μεγαλύτερο άθροισμα προς το μικρότερο).

parara 28-05-20 14:01

πρόβλημα σε MySql
 
Ωστόσο δε δουλεύει σε MySQL
πρόβλημα λέει στη γραμμή 1 , δεν αναγνωρίζει την TOP

σε access 2003 δουλεύει μια χαρά

kapetang 28-05-20 14:55

Αφαίρεσε το Top 1 και το ερωτηματικό μετά το DESC και πρόσθεσε στο ερώτημα τη γραμμή LIMIT 1 ; Ίσως δουλέψει.

Διαφορετικά θα πρέπει να ψάξεις την αντίστοιχη πρόταση της mySQL.

parara 28-05-20 16:34

Ναι σωστά αυτό έκανα αμέσως μετά. Εψαξα να βρω την αντίστοιχη για την TOP και την αντικατέστησα. Αυτή είναι η LIMIT

ευχαριστώ και πάλι.

kapetang 28-05-20 16:51

Να είσαι καλά Διονύση και καλή συνέχεια.

parara 29-05-20 08:41

id name salaryt B_name_id B_name

2 Dionisis 22000 01 Papado
3 Vasilis 27000 02 Anastaso
2 Dionisis 19000 03 Georgiou
1 Kostas 11000 04 Didaska
3 Vasilis 17000 05 Raptis


Τώρα πρόσθεσα ακόμη δύο στήλες στον πίνακα salary την στήλη B_name_id και την B_name και προσπαθώ για το όνομα της πρώτης στήλης name που έχει το μεγαλύτερο αθροιστικά salary , να μου επιστρέφει και τα ονόματα

δηλαδή από τα παραπάνω να έχω

2 Dionisis 41000 Papado Raptis

όσες δοκιμές έχω κάνει πάντα μου επιστρέφει ένα μόνο όνομα , το πρώτο

Tasos 29-05-20 10:28

Αγαπητέ Διονύση (συγγνώμη για το Γιάννη) ,
είναι εγκληματικό να χρησιμοποιούμε δεσμευμένα ονόματα όπως το Name ως ονόματα πεδίων!! Έστω ότι ο πίνακας ονομάζεται Table1 και το πεδίο Name Fullname.

Ο παρακάτω παρακάτω κώδικας μπορεί να μπει σε ένα ερώτημα σε προβολή SQL:

Κώδικας:

SELECT TOP 1 Table1.FullName, Sum(Table1.Salary) AS SumOfSalary
FROM Table1
GROUP BY Table1.FullName
ORDER BY Sum(Table1.Salary) DESC;

και επιστρέφει το ζητούμενο.

Τάσος

parara 29-05-20 11:08

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

Στο ίδιο ερώτημα αν κοιτάξεις πιο πάνω ζητώ να κάνω κάτι επιπλέον.

Αν μπορείς να βοηθήσεις;

Tasos 29-05-20 13:37

Ο κώδικας SQL κάνει ακριβώς αυτό που ζήτησες δηλαδή σου επιστρέφει το όνομα (στο μήνυμα σου name)" που έχει το μεγαλύτερο αθροιστικά salary".
Αν θέλεις κάτι άλλο περίγραψε μας το ζητούμενο ξανά.

parara 29-05-20 13:51

Νέο ζητούμενο
 
id Αname salaryt Bname_id B_name

2 Dionisis 22000 01 Papado
3 Vasilis 27000 02 Anastaso
2 Dionisis 19000 03 Georgiou
1 Kostas 11000 04 Didaska
3 Vasilis 17000 05 Raptis


Τώρα πρόσθεσα ακόμη δύο στήλες στον πίνακα salary την στήλη B_name_id και την B_name και προσπαθώ για το όνομα της πρώτης στήλης name που έχει το μεγαλύτερο αθροιστικά salary , να μου επιστρέφει και τα ονόματα

δηλαδή από τα παραπάνω να έχω

2 Dionisis 41000 Papado Raptis

όσες δοκιμές έχω κάνει πάντα μου επιστρέφει
2 Dionisis 41000 Papado

δηλαδή μόνο το ένα όνομα

Tasos 29-05-20 14:23

Dionisis 41000 Papado Raptis

Δεν μπόρεσα να καταλάβω.

Το Raptis μετά το Papado που κολλάει;;;; Πρόκειται για δεύτερη γραμμή μήπως;;

Γίνε πιο σαφής σε παρακαλώ.

parara 29-05-20 14:37

Ναι ....

O Dionisis έχει το μεγαλύτερο αθροιστικά salary (που απαντήθηκε ήδη σωστά)
Αυτό το salary προέρχεται από τους papado και raptis και αυτούς θέλω να εμφανίζω είτε σε μία σειρά είτε από κάτω

Dionisis 41000 Papado Raptis

ή

Dionisis
41000
Papado
Raptis

Tasos 29-05-20 15:52

1 Συνημμένο(α)
Σε ένα ερώτημα με το όνομα TopName Βάλε το παρακάτω:

Κώδικας:

SELECT TOP 1 Table1.Αname, Sum(Table1.Salary) AS SumOfSalary
FROM Table1
GROUP BY Table1.Αname
ORDER BY Sum(Table1.Salary) DESC
UNION SELECT Table1.B_name, Sum(Table1.Salary) AS SumOfSalary
FROM TopName INNER JOIN Table1 ON TopName.Αname = Table1.Αname
GROUP BY Table1.B_name;

Προσοχή!! Το A στο όνομα Αname του μηνύματος σου είναι ελληνικό. Στον κώδικα είναι λατινικό για να μην μας μπερδεύει ακόμα περισσότερο.

Κατόπιν σε ένα νέο ερώτημα βάλε το παρακάτω:

Κώδικας:

SELECT TOP 1 Table1.Αname, Sum(Table1.Salary) AS SumOfSalary
FROM Table1
GROUP BY Table1.Αname
ORDER BY Sum(Table1.Salary) DESC
UNION SELECT Table1.B_name, Sum(Table1.Salary) AS SumOfSalary
FROM TopName INNER JOIN Table1 ON TopName.Αname = Table1.Αname
GROUP BY Table1.B_name;

Δες στο επισυναπτόμενο παράδειγμα μια απλουστευμένη λύση.

Τάσος

parara 29-05-20 23:44

ΣΟΥΠΕΡ
 
Ναι όντως δουλεύει (αν και μου έστειλες 2 φορές τον ίδιο κώδικα)

Αυτό λέγεται ερώτημα συνένωσης;


Ευχαριστώ για τον κόπο σου και την υπομονή σου;
Αλήθεια ασχολείσαι επαγγελματικά ή ερασιτεχνικά;

Tasos 30-05-20 10:11

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

Το δεύτερο τμήμα είναι κάτι ξεχωριστό και περιέχει διαφορετικά ονόματα.

Δραστηριοποιούμαι επαγγελματικά σ αυτόν τον τομέα στο εξωτερικό από το 2000.


Η ώρα είναι 20:37.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2