Bonjour,
j'ai une requête à effectuer pour ma formation, je la pensais juste mais visiblement elle ne l'est pas.

Tout d'abord, je vous donne texto la requête, en anglais :

1. The bosses at Agent_Ville would like to know who in recent years has been most active in doing research into our Information database.
We’d like a list of the top 10 by volume. So that if two agents have accessed the same amount of data and they are in the top ten they should be displayed.

Please could you order them by volume accessed (Greatest First) and then by surname(Alphabetically).
Please name this table Research_topten.

The Columns used should be, full_name and Data_Volume_Accessed. And the starting year for this is 2004.
Voilà comment je comprends la question :

Nous devons réaliser une requête qui permettra de connaître les 10 agents qui ont accéder au plus d'informations dans notre base de donnée.
Nous devons comptabiliser uniquement les recherches effectués après 2003.
Nous devons prendre en compte les égalités, par exemple si un agent 8 agents ont accédé à 7 information et que ce total figure dans le top 10 ces 8 agents doivent être affiché.

Ensuite on nous demande simplement d'ordonné les résultats ...


Pour ce faire, j'ai 3 tables qui vont (ou pas) servir :
Une table information, qui répertorie les informations entré dans la base de donnée par les agents secret (glups)
Une table agent, qui identifie les agents
une table info_access qui montre les informations accédées, par quel agent et quand.

Voici ma requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
drop view  
            result_research_topten;
create view 
            result_research_topten
as
select 
                            "full name", 
                            data_volume_accessed
                    from (
                                  select 
                                        ia.agent_id, 
                                        a.last_name || ' ' || a.first_name "full name", 
                                        count(*) data_volume_accessed
                                  From 
                                        info_access ia 
                                        inner join 
                                        agents a 
                                        on  a.agent_id=ia.agent_id
                                  where to_char(logon_time,'yyyy')>2003
                                  group by 
                                          ia.agent_id, 
                                          a.last_name || ' ' || a.first_name
                                 order by 
                                          count(*) desc, 
                                          a.last_name || ' ' || a.first_name
 
                          )
                    where data_volume_accessed  in            (
                                                    select data_volume_accessed
                                                    from (
                                                                select data_volume_accessed
                                                                from (
                                                                        select 
                                                                              agent_id,
                                                                              count(agent_id) data_volume_accessed
                                                                        from info_access
                                                                        where to_char(logon_time,'yyyy')>2003
                                                                        group by agent_id
                                                                        )
                                                               group by data_volume_accessed
                                                               order by data_volume_accessed desc
                                                          )
                                                    where rownum<11
                                                    );
drop table 
            research_topten;
create table 
            research_topten
as
select * 
from result_research_topten
order by 
          data_volume_accessed desc, 
          "full name"
;
drop view 
          result_research_topten
;
Voila, visiblement la requête est fausse, on me demande de bien relire la question ...

I need some help ...