मेरे पास चार टेबल हैं: मैच, आंकड़े, खिलाड़ी (जौउर) और टीम (उपकरण)

मुझे एक चयन बनाने की आवश्यकता है जहां मैं खिलाड़ियों (प्रथम नाम (प्रीनम) और अंतिम नाम (नाम)) को प्रदर्शित करता हूं जिन्होंने टीम 'लेस सेनेटर्स' के खिलाफ स्कोर किया है (स्कोर मैच तालिका में हैं)। मुझे टीम के नाम का भी उपयोग करना है मैं संक्षिप्त नाम 'ओटी' का उपयोग नहीं कर सकता

CREATE TABLE equipes 
(
    codeequipe  CHAR(3) NOT NULL,
    nomequipe   VARCHAR2(50),
    codediv     CHAR(1) NOT NULL,
    ville       VARCHAR2(40),
    nbcoupes    NUMBER
);

ALTER TABLE equipes ADD CHECK (nbcoupes >= 0);

ALTER TABLE equipes 
    ADD CONSTRAINT equipes_pk PRIMARY KEY (codeequipe);

CREATE TABLE joueurs 
(
    numjoueur   NUMBER(3) NOT NULL,
    nom         VARCHAR2(30),
    prenom      VARCHAR2(30),
    codeequipe  CHAR(3)
);

ALTER TABLE joueurs 
    ADD CONSTRAINT joueurs_pk PRIMARY KEY (numjoueur);

CREATE TABLE matchs 
(
    nummatch     NUMBER(4) NOT NULL,
    datematch    DATE,
    codeequipev  CHAR(3) NOT NULL,
    codeequiper  CHAR(3) NOT NULL,
    scorev       NUMBER(2),
    scorer       NUMBER(2)
);

ALTER TABLE matchs 
    ADD CONSTRAINT matchs_pk PRIMARY KEY (nummatch);

CREATE TABLE statistiques 
(
    nummatch   NUMBER(4) NOT NULL,
    numjoueur  NUMBER(3) NOT NULL,
    nbbuts     NUMBER(3),
    nbpasse    NUMBER(3)
);

ALTER TABLE statistiques 
    ADD CONSTRAINT statistiques_pk PRIMARY KEY (numjoueur, nummatch);

ALTER TABLE matchs
    ADD CONSTRAINT codeequipev 
        FOREIGN KEY (codeequipev) REFERENCES equipes (codeequipe);

ALTER TABLE equipes
    ADD CONSTRAINT equipes_divisions_fk 
        FOREIGN KEY (codediv) REFERENCES divisions (codediv);

ALTER TABLE joueurs
    ADD CONSTRAINT joueurs_equipes_fk 
        FOREIGN KEY (codeequipe) REFERENCES equipes (codeequipe);

ALTER TABLE matchs
    ADD CONSTRAINT matchs_equipes_fk 
        FOREIGN KEY (codeequiper) REFERENCES equipes (codeequipe);

ALTER TABLE statistiques
    ADD CONSTRAINT statistiques_joueurs_fk 
        FOREIGN KEY (numjoueur) REFERENCES joueurs (numjoueur);

ALTER TABLE statistiques
    ADD CONSTRAINT statistiques_matchs_fk 
        FOREIGN KEY (nummatch) REFERENCES matchs (nummatch);

INSERT INTO equipes VALUES ('MTL', 'LES CANADIENS DE MONTRÉAl', 'E', 'MONTRÉAl', 24);
INSERT INTO equipes VALUES ('TOR', 'LES MAPLE LEAFS', 'E', 'TORONTO', 22);
INSERT INTO equipes VALUES ('OTT', 'LES SÉNATEURS', 'E', 'OTTAWA', 4);
INSERT INTO equipes VALUES ('AVL', 'LES AVALANCHES', 'O', 'COLORADO', 2);
INSERT INTO equipes VALUES ('VAN', 'LES CANUKS', 'O', 'VANCOUVER', 1);
INSERT INTO equipes VALUES ('BRU', 'LES BRUNS DE BOSTON', 'E', 'BOSTON', 13);

INSERT INTO Joueurs VALUES (1, 'PRICE', 'CAREY', 'MTL');
INSERT INTO Joueurs VALUES (2, 'MARKOV', 'ANDRÉ', 'MTL');
INSERT INTO Joueurs VALUES (3, 'SUBBAN', 'KARL', 'MTL');
INSERT INTO Joueurs VALUES (4, 'PATIORETTY', 'MAX', 'MTL');
INSERT INTO Joueurs VALUES (10, 'HAMMOND', 'ANDREW', 'OTT');
INSERT INTO Joueurs VALUES (6, 'STONE', 'MARC', 'OTT');
INSERT INTO Joueurs VALUES (9, 'TURIS', 'KYLE', 'OTT');
INSERT INTO Joueurs VALUES (7, 'GALLAGHER', 'BRANDON', 'MTL');
INSERT INTO Joueurs VALUES (8, 'TANGUAY', 'ALEX', 'AVL');
INSERT INTO Joueurs VALUES (11, 'THOMAS', 'BIL', 'AVL');
INSERT INTO Joueurs VALUES (5, 'PATOCHE', 'ALAIN', NULL);
INSERT INTO Joueurs VALUES (12, 'POIRIER', 'JUTEUX', NULL);

INSERT INTO Matchs VALUES (100, TO_DATE('18-10-30', 'YY/MM/DD'), 'MTL', 'TOR', 3 , 4);
INSERT INTO Matchs VALUES (101, TO_DATE('18-11-10', 'YY/MM/DD'), 'TOR', 'MTL', 3 , 3);
INSERT INTO Matchs VALUES (102, TO_DATE('18-10-12', 'YY/MM/DD'), 'MTL', 'OTT', 2 , 0);
INSERT INTO Matchs VALUES (103, TO_DATE('18-10-20', 'YY/MM/DD'), 'OTT', 'MTL', 0 , 1);
INSERT INTO Matchs VALUES (104, TO_DATE('18-11-30', 'YY/MM/DD'), 'MTL', 'AVL', 3 , 4);
INSERT INTO Matchs VALUES (105, TO_DATE('18-11-10', 'YY/MM/DD'), 'AVL', 'MTL', 0 , 0);
INSERT INTO Matchs VALUES (106, TO_DATE('18-12-12', 'YY/MM/DD'), 'MTL', 'VAN', 2 , 0);
INSERT INTO Matchs VALUES (107, TO_DATE('18-03-17', 'YY/MM/DD'), 'VAN', 'MTL', 3 , 1);
INSERT INTO Matchs VALUES (108, TO_DATE('18-11-30', 'YY/MM/DD'), 'OTT', 'VAN', 0 , 0);
INSERT INTO Matchs VALUES (109, TO_DATE('18-11-10', 'YY/MM/DD'), 'OTT', 'TOR', 0 , 4);
INSERT INTO Matchs VALUES (114, TO_DATE('18-10-30', 'YY/MM/DD'), 'BRU', 'TOR', 3 , 4);
INSERT INTO Matchs VALUES (115, TO_DATE('19-02-15', 'YY/MM/DD'), 'AVL', 'TOR', null , null);
INSERT INTO Matchs VALUES (120, TO_DATE('18-02-26', 'YY/MM/DD'), 'MTL', 'AVL', null , null);
INSERT INTO Matchs VALUES (121, TO_DATE('19-02-20', 'YY/MM/DD'), 'MTL', 'OTT', null , null);

INSERT INTO statistiques VALUES (100,3,2,2);
INSERT INTO statistiques VALUES (100,7,1,1);
INSERT INTO statistiques VALUES (101,3,1,0);
INSERT INTO statistiques VALUES (101,7,0,1);
INSERT INTO statistiques VALUES (101,4,1,2);
INSERT INTO statistiques VALUES (101,2,1,2);
INSERT INTO statistiques VALUES (100,4,0,2);
INSERT INTO statistiques VALUES (102,3,1,1);
INSERT INTO statistiques VALUES (102,7,1,2);
INSERT INTO statistiques VALUES (102,9,0,1);
INSERT INTO statistiques VALUES (106,4,1,1);
INSERT INTO statistiques VALUES (106,3,0,2);
INSERT INTO statistiques VALUES (106,2,1,0);
INSERT INTO statistiques VALUES (100,1,null,null);
INSERT INTO statistiques VALUES (101,1,null,null);
INSERT INTO statistiques VALUES (103,1,null,null);
INSERT INTO statistiques VALUES (102,1,null,null);
0
Agent boubou 24 मार्च 2020, 06:44
1
ऐसे कॉलम नामों के साथ काम करना बहुत मुश्किल है। कृपया कॉलम नामों को पढ़ने योग्य अंग्रेजी में बदलें ताकि हम आपकी मदद करने का प्रयास कर सकें।
 – 
Popeye
24 मार्च 2020, 07:50

2 जवाब

 select j.prenom, 
        j.nom, 
        e.nomequipe, 
        s.nbbuts
 from joueurs j
  join equipes e on j.codeequipe = e.codeequipe
  join statistiques s on j.NUMJOUEUR = s.NUMJOUEUR
  join matchs m on m.nummatch = s.nummatch
 where e.codeequipe in 
       (select CODEEQUIPEV from matchs 
        where m.CODEEQUIPER = 'OTT' 
        or m.CODEEQUIPEV = 'OTT')
 and rownum < 2
 order by s.nbbuts desc;
0
Cheery Query 24 मार्च 2020, 08:35

आप चार तालिकाओं के बीच निम्नलिखित क्वेरी का उपयोग कर सकते हैं, यह मानते हुए कि कोई स्वयं का गोल नहीं हुआ है:

SELECT e.nomequipe AS "Team Against", CONCAT(j.nom||' ',j.prenom) AS "Player Name", 
       SUM( NVL(s.nbbuts,0) ) AS "Total Goals Scored"
  FROM statistiques s
  LEFT JOIN joueurs j
    ON j.numjoueur = s.numjoueur
  LEFT JOIN matchs m
    ON m.nummatch = s.nummatch
  LEFT JOIN equipes e
    ON e.codeequipe = j.codeequipe  
 WHERE NVL(s.nbbuts,0)>0
   AND (( m.codeequipev = 'OTT' AND NVL(m.scorer,0)>0 )
     OR ( m.codeequiper = 'OTT' AND NVL(m.scorev,0)>0 ))
   AND j.codeequipe != 'OTT' -- indeed this line is redundant, added because no own goal occured assumption
 GROUP BY e.nomequipe, j.nom, j.prenom

जहां ट्रिक codeequipev बनाम scorer और codeequiper बनाम scorev के बीच क्रॉस लॉजिक का उपयोग कर रही है।

बीटीडब्ल्यू, स्कोर और लक्ष्यों से संबंधित कुछ डेटा गायब हैं (शून्य)। अच्छे परिणाम प्राप्त करने के लिए गैर-शून्य मानों के रूप में पॉप्युलेट किया जा सकता है।

डेमो

0
Barbaros Özhan 24 मार्च 2020, 10:38