2016-06-16 15 views
-1

Wie kann ich alle Länder auswählen, die mehr als die durchschnittliche Anzahl der (jeder) Medaille in allen Ländern aus der unten stehenden Tabelle gewonnen:MySQL Auswahl basiert auf AVG-Funktion

Results Table

+-----------+-------------+--------+-----------------+----------------------------+-------------------------------+-----------------------------------------+---------------------------------+-------------------------+ 
| idRESULTS | STATUS  | MEDALS | EVENTS_idEVENTS | EVENTS_ATHLETES_idATHLETES | EVENTS_ATHLETES_TEAMS_idTEAMS | EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY | EVENTS_VARIOUS_SPORTS_SPORTS_ID | awarded_medals_medal-id | 
+-----------+-------------+--------+-----------------+----------------------------+-------------------------------+-----------------------------------------+---------------------------------+-------------------------+ 
| results1 | DID-NOT-WIN | SILVER | TEN    | MS       | RUS-WTA      | RUS          | WOMENS_TENNIS     |      2 | 
| results1 | WON   | GOLD | TEN    | VW       | USA-WTA      | USA          | WOMENS_TENNIS     |      3 | 
| results2 | DID-NOT-WIN | BRONZE | ATH    | JG       | USA-TF-MEN     | USA          | TRACK-AND-FIELD     |      3 | 
| results2 | WON   | GOLD | ATH    | UB       | JAM-TF-MEN     | JAM          | TRACK-AND-FIELD     |      1 | 
| results3 | WON   | GOLD | TEN-DOUBLE  | SW       | USA-WTA      | USA          | WOMENS_TENNIS     |      3 | 
| results3 | WON   | GOLD | TEN-DOUBLE  | VW       | USA-WTA      | USA          | WOMENS_TENNIS     |      1 | 
+-----------+-------------+--------+-----------------+----------------------------+-------------------------------+-----------------------------------------+---------------------------------+-------------------------+ 

Ich benutze Dieser Code:

CREATE VIEW `Countries_Athletes_who_wo_Gold` AS 
select * from results where medals = 'Gold' 

select EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY, medals from countries_athletes_who_wo_gold 
where medals > (select AVG(medals) from countries_athletes_who_wo_gold) ; 

aber bekomme ich nicht die erforderliche Ausgabe?

+0

Haben Sie ohne die 'VIEW' versucht? Es sieht alles aus, was Sie tun müssen, um zu versuchen, die zwei Verweise auf den Ansichtsnamen in der Abfrage durch 'Ergebnisse, wo Medaillen = 'Gold' ersetzen. Vielleicht müssen Sie die Medaillen zuerst nach Ländern summieren, dann den Durchschnitt daraus ziehen und dann die Länder finden, deren Gesamtmedaillen den Durchschnitt der Gesamtbeträge übersteigen. – Uueerdo

+0

Ihr Code sieht so aus, als sollte es funktionieren. Welche Ausgabe erwartest du, was bekommst du stattdessen? – Barmar

+0

Ich möchte alle Länder auflisten, die mehr als die durchschnittliche Anzahl (beliebiger) Medaillen in diesem Fall gewonnen haben. Gold – blueGOLD

Antwort

1

Sie müssen zuerst eine Abfrage schreiben, die die Medaillen für jedes Land zählt.

SELECT EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY, COUNT(*) AS medal_count 
FROM Countries_Athletes_who_wo_Gold 
GROUP BY EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY 

Dann nutzen Sie diese als Unterabfrage zweimal in der Abfrage: einmal jedes Land Medaillenspiegel zu bekommen, und dann in allen Ländern den Durchschnitt zu erhalten.

SELECT * 
FROM (
    SELECT EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY, COUNT(*) AS medal_count 
    FROM Countries_Athletes_who_wo_Gold 
    GROUP BY EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY 
) AS by_country 
JOIN (SELECT AVG(medal_count) AS avg_medals 
     FROM (SELECT EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY, COUNT(*) AS medal_count 
      FROM Countries_Athletes_who_wo_Gold 
      GROUP BY EVENTS_ATHLETES_TEAMS_COUNTRY_idCOUNTRY) AS by_country 
    ) AS all_countries 
WHERE medal_count > avg_medals 

DEMO

+0

Muss ich die Anzahl der Goldmedaillen, die ein Land gewonnen hat, zusammenfassen? – blueGOLD

+0

Ist die 'awarded_medals_medial-id' nicht schon eine Summe? – Barmar

+0

es ist nur die IDs für die Medaillenarten? – blueGOLD