Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35

    Classifica calcistica con punti di penalizzazione

    Ciao a tutti!
    Sto usando il codice SQL per la mia classifica (consigliato in questo topic: https://forum.html.it/forum/showthre...readid=1412935):

    codice:
    SELECT squadra,squadre_SerieA.nome_squadra,
    SUM(if(fatti!='',1,0)) AS partite,
    SUM(if(punteggio=2,1,0)) AS vittorie,
    SUM(if(punteggio=1,1,0)) AS pareggi,
    SUM(if(punteggio=0 AND fatti != '',1,0)) AS sconfitte,
    SUM(punteggio) AS punteggio,
    SUM(fatti) AS fatti,
    SUM(subiti) AS subiti,
    SUM(fatti)-SUM(subiti) AS diff_reti,
    SUM(if(dove='C',fatti,0)) as fatti_casa,
    SUM(if(dove='T',fatti,0)) as fatti_trasferta,
    SUM(if(dove='C',subiti,0)) as subiti_casa,
    SUM(if(dove='T',subiti,0)) as subiti_trasferta,
    SUM(if(punteggio=2 and dove = 'C',1,0)) AS vittorie_casa,
    SUM(if(punteggio=1 and dove = 'C',1,0)) AS pareggi_casa,
    SUM(if(punteggio=0 and dove = 'C' AND fatti != '',1,0)) AS sconfitte_casa,
    SUM(if(punteggio=2 and dove = 'T',1,0)) AS vittorie_trasferta,
    SUM(if(punteggio=1 and dove = 'T',1,0)) AS pareggi_trasferta,
    SUM(if(punteggio=0 and dove = 'T' AND fatti != '',1,0)) AS sconfitte_trasferta
    FROM
    (SELECT sq_casa AS squadra, gol_sq_casa_and AS fatti, gol_sq_osp_and AS subiti,'C' AS dove, 
    case
    WHEN gol_sq_casa_and > gol_sq_osp_and THEN 2
    WHEN gol_sq_casa_and = gol_sq_osp_and AND gol_sq_casa_and <> '' THEN 1
    ELSE 0
    end AS punteggio
    FROM partite_SerieA WHERE id_stagione='51'
    UNION ALL
    SELECT sq_osp AS squadra, gol_sq_osp_and AS fatti, gol_sq_casa_and AS subiti,'T',
    case
    WHEN gol_sq_osp_and > gol_sq_casa_and THEN 2
    WHEN gol_sq_osp_and = gol_sq_casa_and AND gol_sq_osp_and <> '' THEN 1
    ELSE 0
    end AS punteggio
    FROM partite_SerieA WHERE id_stagione='51'
    UNION ALL
    SELECT sq_casa AS squadra, gol_sq_casa_rit AS fatti, gol_sq_osp_rit AS subiti,'C' AS dove,
    case
    WHEN gol_sq_casa_rit > gol_sq_osp_rit THEN 2
    WHEN gol_sq_casa_rit = gol_sq_osp_rit AND gol_sq_casa_rit <> '' THEN 1
    ELSE 0
    end AS punteggio
    FROM partite_SerieA WHERE id_stagione='51'
    UNION ALL
    SELECT sq_osp AS squadra, gol_sq_osp_rit AS fatti, gol_sq_casa_rit AS subiti,'T',
    case
    WHEN gol_sq_osp_rit > gol_sq_casa_rit THEN 2
    WHEN gol_sq_osp_rit = gol_sq_casa_rit AND gol_sq_osp_rit <> '' THEN 1
    ELSE 0
    end AS punteggio
    FROM partite_SerieA WHERE id_stagione='51'
    ) AS tab
    JOIN squadre_SerieA ON squadra=squadre_SerieA.id_squadra
    GROUP BY squadra
    ORDER BY punteggio DESC, diff_reti DESC, nome_squadra
    Avrei bisogno di aggiungere la possibilità che il punteggio tenga conto dei punti di penalizzazione, che ho salvato in una tabella chiamata 'campionati_SerieA' in una colonna chiamata 'penalita'.

    Qualsiasi aiuto è ben accetto!
    Grazie

    Ciaooo
    Tiziano

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35
    Up!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35
    UP

  4. #4
    che vuol dire "tenga conto"? puoi fare un esempio?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35
    Ciao, dunque, questo script recupera i dati da una tabella chiamata "partite_SerieA" e mi crea una classifica, funziona alla grande, ma dovrebbe tenere conto anche degli eventuali punti di penalizzazione che potrebbero esserci, questi sono salvati in un'altra tabella chiamata "campionati_SerieA" dove è presente una colonna chiamata "penalita", visto che già questo script mette in relazione già un'altra tabella chiamata "squadre_SerieA", che mi recupera i nome delle squadre, pensavo potessi allo stesso modo fare con quella che mi serve ora, ma provando in diversi modi non riesco a trovare una soluzione. Spero di essermi spiegato, hai idea di come posso fare?
    Grazie.
    Tiziano

  6. #6
    aridajela, che vuol dire "tenere conto"? Puoi fare un esempio con dei dati?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35
    si certo, che dati ti possono essere utili per avere un'idea?

  8. #8
    che ne so, sei tu che devi fare l'esempio ancora non ho capito che calcoli devi fare...

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35
    Ciao eecomi, allora ho una tabella struttarata in questo modo:

    codice:
    -- phpMyAdmin SQL Dump
    -- version 4.9.3
    -- https://www.phpmyadmin.net/
    --
    -- Host: localhost:8889
    -- Generation Time: Jul 01, 2020 at 02:50 PM
    -- Server version: 5.7.26
    -- PHP Version: 7.4.2
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    --
    -- Database: `my_cdb`
    --
    
    -- --------------------------------------------------------
    
    --
    -- Table structure for table `campionati_SerieA`
    --
    
    CREATE TABLE `campionati_SerieA` (
      `id_s_s` int(11) NOT NULL,
      `idsquadra` int(11) NOT NULL,
      `penalita` int(11) NOT NULL,
      `id_stagione` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    --
    -- Dumping data for table `campionati_SerieA`
    --
    
    INSERT INTO `campionati_SerieA` (`id_s_s`, `idsquadra`, `penalita`, `id_stagione`) VALUES
    (6, 46, 0, 1),
    (7, 51, 0, 1),
    (18, 72, 0, 1),
    (9, 54, 0, 1),
    (13, 66, 0, 1),
    (16, 70, 0, 1),
    (12, 65, 0, 1),
    (5, 41, 0, 1),
    (15, 69, 0, 1),
    (14, 67, 0, 1),
    (17, 71, 0, 1),
    (10, 61, 0, 1),
    (8, 52, 0, 1),
    (11, 64, 0, 1),
    (3, 5, 0, 1),
    (4, 30, 0, 1),
    (2, 4, 0, 1),
    (1, 1, 0, 1),
    (670, 1, 0, 2),
    (671, 72, 0, 2),
    (672, 64, 0, 2),
    (673, 52, 0, 2),
    (674, 22, 0, 2),
    (675, 61, 0, 2),
    (676, 71, 0, 2),
    (677, 67, 0, 2),
    (678, 20, 0, 2),
    (679, 51, 0, 2),
    (680, 69, 0, 2),
    (681, 41, 0, 2),
    (682, 65, 0, 2),
    (683, 4, 0, 2),
    (684, 5, 0, 2),
    (685, 70, 0, 2),
    (686, 66, 0, 2),
    (687, 54, 0, 2),
    (688, 1, 0, 3),
    (689, 72, 0, 3),
    (690, 58, 0, 3),
    (691, 64, 0, 3),
    (692, 52, 0, 3),
    (693, 22, 0, 3),
    (694, 68, 0, 3),
    (695, 61, 0, 3),
    (696, 71, 0, 3),
    (697, 67, 0, 3),
    (698, 69, 0, 3),
    (699, 41, 0, 3),
    (700, 65, 0, 3),
    (701, 4, 0, 3),
    (702, 5, 0, 3),
    (703, 70, 0, 3),
    (704, 66, 0, 3),
    (705, 54, 0, 3);
    
    --
    -- Indexes for dumped tables
    --
    
    --
    -- Indexes for table `campionati_SerieA`
    --
    ALTER TABLE `campionati_SerieA`
      ADD PRIMARY KEY (`id_s_s`);
    
    --
    -- AUTO_INCREMENT for dumped tables
    --
    
    --
    -- AUTO_INCREMENT for table `campionati_SerieA`
    --
    ALTER TABLE `campionati_SerieA`
      MODIFY `id_s_s` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2223;
    i valori della colonna chiamata "penalita" dovrebbero sottrarsi al "punteggio" calcolato dalla query scritta sopra. La mia difficoltà è che non riesco a creare una query unica (se è possibile) che includa la differenza di questi valori.

  10. #10
    aggiungi una ulteriore JOIN usando idsquadra, poi sottrai così

    SUM(punteggio)-campionati_SerieA.penalita AS punteggio,

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.