[SQL] comment calculer un total ?
Résoluvoilà jusqu'ici j'utilisais la requête suivante en SQL :
SELECT ProductName, SUM(Quantity) AS TOTAL
FROM DeliveryDtls
WHERE (DATEDIFF(dd, CreateDate, '11/02/2005') = 0) AND (Quality LIKE 'S')
GROUP BY ProductName
ProductName étant une colonne ainsi que Qality. Dans la table Quality j'ai 5 option dont 'S'.
Cette requête me permet d'avoir le total de mes produits de la table pour la journée. Chaque ligne représentant un produit.
Moi je voulais savoir s'il était possible d'avoir une seule ligne au lieu de plusieurs et donc un total.
Pour exemple :
le jour cité ma requête donne comme résultat :
ProductName I TOTAL
produit1 : 5
produit2 : 15
produit3 : 20
produit4 : 100
produit5 : 5
...
moi je voudrais que le résultat de ma requête soit :
Totalproduits : 145 par exemple
J'ai un bouquin mais dedans ils expliquent comment faire une moyenne mais pas comment faire un total d'une table...
si quelqu'un a la réponse je l'en remercie d'avance...
--
Cordialement,
Riwalenn
30 réponses
L’objectif est d’obtenir un total unique des quantités pour une journée en SQL à partir de DeliveryDtls, en utilisant SUM(Quantity) et un filtre sur CreateDate et Quality. La problématique initiale est de passer d’un affichage par produit (GROUP BY ProductName) à une seule ligne récapitulative comme Totalproduits, par exemple pour une date donnée. Plusieurs réponses suggèrent de supprimer ProductName ou le GROUP BY et d’employer SUM(Quantity) avec les conditions sur la date et Quality, tout en soulevant des questions de formatage de date. Des échanges ultérieurs évoquent également la possibilité d’étendre la requête à une période plus longue, comme une semaine, en utilisant des plages de dates et des opérateurs appropriés sans refaire la logique du groupement.
-
Et si tu enleve le "productName" ?
SELECT SUM(Quantity) AS TOTAL FROM DeliveryDtls WHERE (DATEDIFF(dd, CreateDate, '11/02/2005') = 0) AND (Quality LIKE 'S')
-
Je voudrais faire une calcul qui conserne le nombre de client qui ache mes produit par jour
-
Est-ce que cette requete SQL est juste?
UPDATE train SET statut='Arrivé' WHERE '$heure_actuelle'=ADDTIME(heure_arrivee, retard) AND retard<>'00:00:00'"
parce qu'il se passe rien
Merci -
Bonjourà tous,
bien des experts et moi avec bcp des difficultés, je n'ai aps osé à vous demander qqch.
Sachant que je n'ai aps fait des études en SI.
Je voulais savoir si ma requete était cohérent:
Voici
Je travaille pr une petite agence de voyage, et j"'ai créé une requete pour savoir combient des agents se sont connectés pendant ce mois-ci et combient des conexions il sont eu. A ce jour, j'obtiens avec cette requete (qui avt fonctionnait très bien) des agents par exemple 5 agents inscrits ce mois-ci quis e sont connecté 20 fois. OK, mais j'obtiens un total de plus de 5 agents connectés...chose qui n'est pas possible si jen ai que 5!
voici la requet:
SELECT [200711 - Inscrits].Iata, 200711 AS [An-Mois], [200711 - Inscrits].CompteDeIata AS [Cumul Inscrits], Sum([200711 - connexion].Connex_mois) AS [Connexion mois], Sum([200711 - connexion].CompteDeLogon) AS [Nb agents connectés]
FROM [200711 - Inscrits] LEFT JOIN [200711 - connexion] ON [200711 - Inscrits].Iata = [200711 - connexion].Iata
GROUP BY [200711 - Inscrits].Iata, 200711, [200711 - Inscrits].CompteDeIata;
Merci de votre aide.
Crdlt,
Lirba -
soit la base cinéma ayant le schéma Cinéma (Film,Lieu,Pgme_hebdo).Les schémas de relations sont les suivants:
Film(Titre, Réalisateur, Acteur),
Lieu(Salle,Adresse,Tel),
Pgme_hebdo(Salle,#Titre,jour,horaire).
svp j vx écrire les requetes suivantes en SQL
1-QUEL EST LE REALISATEUR DU FILM " The big Lebowsky"?
2-DANS QUELLES SALLES PASSE LA FILM "Gris et chuchotements"(on veut le nom de la salee ainsi que son adresse)
3-quels sont les réalisateurs qui jouent dans leurs propres films?
4-quelles sont les salles ou je pourrai voir un film de où joue "J.P Bacri"?
merci pour votre réponse -
si vous permetter de m'envoyez toutes instructions du SQL evec explication de chaque instruction et si vous permetez un example avec correction.
veuillez agréer mes meuilleurs expressions. -
ca sera mieux si tu decrit bien votre probleme !
-
je dois calculer un pourcentage des appels réglés par rapport à des appels ouverts, c'est à dire comment calculer un pourcentage
-
merci bcp pour votre aide et pour les solutions
-
Je te remercie, je n'y manquerais pas
;)
-
Y'a pas de probleme, si j'amais tu as un autre probleme, n'hesite pas. ;-)
-
Bonjour voilà j'ai ce problème avec PL/SQL.
Je n'ai pu résoudre que les questions 1 et 2. Merci
TP de Oracle (SQL*Plus – PL /SQL)
NB : Vous devez peupler la base avec des données afin de tester les différents codes écrits.
Le but final est de vous amener à résoudre un problème posé globalement, dont l’analyse serait, dans la vie réelle, soumise à votre entière responsabilité. La nécessité d’évaluer votre capacité à aborder un tel problème conduit à le décomposer artificiellement en sous questions. Celles-ci sont posées dans un ordre logique et cohérent. Ne pas répondre à une question, ou y répondre dans un ordre quelconque, peut vous conduire à donner, pour une sous question suivante, une réponse hors sujet ou inadapté.
Question 1 :
Une agence de voyages traite avec une chaîne d’hôtels des réservations de chambres en vue d’un séjour.
Dans un premier temps les clients émettent des demandes qui seront par la suite satisfaites dans la mesure des disponibilités.
Ces demandes peuvent concerner un hôtel précis, ou bien un hôtel d’un certain nombre d’étoiles dans une région donnée.
Les chambres sont répertoriées par catégories. Il peut y avoir des chambres de catégories différentes dans un même hôtel, mais un hôtel ne dispose pas forcément de chambre dans chaque catégorie.
Une période de réservation est définie par des dates de début et de fin (respectivement d et f), définies par des chaînes de longueur fixe et de format: (jour/mois/année).
Toute réservation i déjà faite est repérée elle aussi par ses dates de début et de fin (respectivement di et fi).
Lorsqu’on désire réserver une chambre donnée dans un hôtel donné, il faut donc commencer par vérifier que la chambre est bien libre. Ceci est vrai si on a : f < di ou d > fi, quelque soit i.
Voici le script SQL de création de sa base de données :
Create table hotels
(
numh integer,
nomh varchar(30),
etoiles number,
adresse varchar(40),
code_postal char(5),
ville varchar(30),
Constraint pk_hotel primary key (numh)
);
Create table clients
(
numcli integer,
nomcli varchar(30),
adrcli varchar(50),
codepostcli char(5),
villecli varchar(30),
telcli char(15),
Contraint pk_cli primary key (numcli)
);
Create table categories
(
numcat integer,
nbplace integer,
nblits integer,
sdb char(1),
prix float,
Constraint pk_cat primary key (numcat)
);
Create table chambres
(
numch integer,
numh integer,
exposition varchar(20),
priseTV char(1),
telephone char(15),
categorie number,
Constraint pk_ch primary key (numh, numch),
Constraint fk_chcat foreign key (categorie) references categories (numcat) on delete set null on update cascade
) ;
Create table reservations
(
numres integer,
datereserv char(8),
debut char(8),
fin char(8),
nbpers integer,
client integer,
hotel integer,
chambre integer,
Constraint pkres primary key (numres),
Constraint fk_rescli foreign key (client) references clients (numcli) on delete set null on update cascade,
Constraint fk_reshot foreign key (hotel) references chambres (numh) on delete set null on update cascade,
Constraint fk_resch foreign key (chambre) references chambres (numch) on delete set null on update cascade
) ;
Create table demandes
(
numdem integer,
datedemande char(8),
debut char(8),
fin char(8),
nbpers integer,
region varchar(20),
refus char(1),
client integer,
categorie integer,
hotel number,
Constraint pk_dem primary key (numdem),
Constraint fk_demcli foreign key (client) references clients (numcli) on delete set null on update cascade,
Constraint fk_demcat foreign key (categorie) references categories (numcat) on delete set null on update cascade,
Constraint fk_demhot foreign key (hotel) references hotels (numh) on delete set null on update cascade
);
1- Le seul moyen de comparer des dates, représentées par des chaînes dont les poids forts correspondent au numéro de jour, est de les transformer en “dates juliennes”.
Ecrivez, en PL/SQL, la fonction function julienne (d char) return number qui prend la date d, exprimée sous la forme d’une chaîne fixe avec le format SQL ’DD/MM/YYYY’, et la transforme, en utilisant le format de date ’J’, en date julienne (nombre de jours écoulés depuis une date de référence).
2- Afin de savoir si une chambre de numéro donné est libre ou non au cours d’une période donnée, il faut aller rechercher toutes ses dates de début et de fin de réservation, et les comparer avec les bornes de la période.
Ceci nécessite l’exploitation d’un curseur. Ce n’est que lorsqu’on a balayé tous les tuples retournés par ce dernier que l’on peut affirmer que la chambre est bien libre.
Par contre, dès qu’une seule réservation présente dans la table interfère avec la demande, on est certain que la chambre n’est pas libre.
Ecrivez la fonction function est_libre(nh number, nch number, d number, f number) return Boolean Qui retourne VRAI si la chambre numéro nch de l’hôtel nh est libre entre les dates d et f, exprimées en date julienne, et FAUX dans le cas contraire.
3- Donnez le texte PL/SQL de déclaration du curseur qui permet d’obtenir la liste des chambres d’un hôtel donné, défini par sa clé nh, pour une catégorie de chambre précisée par la valeur catch.
4- Donnez la déclaration PL/SQL de la variable destinée à servir de buffer de réception pour les données retournées par ce curseur.
5- Ecrivez la fonction PL/SQL : funtion cherche_libre(nh number, catch number, d char, f char) return integer qui retourne le numéro de la première chambre trouvée d’une catégorie donnée, dans un hôtel donné, libre pour la période comprise entre d et f.
Cette recherche ne pourra se faire que dans la mesure où la recherche d’une chambre de la catégorie demandée a pu aboutir.
Si aucune chambre n’est trouvée, la valeur zéro sera retournée.
N.B : Cette fonction utilise naturellement les fonctions écrites précédemment.
6- Ecrivez la procédure PL/SQL : procedure reserver(ncli number, nom_hotel varchar, la_ville varchar, catch number, nbp number, deb_res char, fin_res char, out OK boolean) qui effectue pour le client de clé ncli, et pour nbp personnes, la réservation d’une chambre de catégorie catch dans l’hôtel de nom nom_hotel de la ville de la_ville, pour la période définie par deb_res et fin_res.
Si l’hôtel n’existe pas, l’exception HOTEL_INCONNU sera levée.
Si la réservation est impossible, le paramètre en mode de sortie OK sera positionné à FAUX. La date de réservation sera naturellement la date du jour (SYSDATE en ORACLE).
On supposera l’existence d’une séquence nommée seq_reserv pour attribuer un nouveau numéro de réservation. -
-
@bobebonjour
Est ce que vous avez la correction de cet exercice?
-
-
non non c'est bon je me suis débrouillée avec le total à la jour grâce au code que tu m'a fourni... ça m'a pris 5mn, heureusement pour moi on avait juste 3 mois de statistiques donc ça a été rapide...
merci -
Ola, d'ailleur j'était tellement pris par mon travail que j'ai pas reposté depuis un moment.
Ta trouver une solution ou ta toujours un probleme ?-
bonjour,
dans datediff ou aussi dateadd, le format est le suivant :
datediff('d', date1, date2) avec d pour une difference en jours, m pour une difference en mois, etc... en fait ce parametre permet de déterminé l'unité de mesure de la différence : seconde, minute, heure, jour, semaine, mois, annee.
et voila...
-
-
Je vous remercie pour votre aide et pour les solutions apportées à mon problème...
;) -
J'en ai aucune idée, on m'avait filé le code sur ce forum pour pouvoir avoir une requête sur une journée donnée vu que le % ne fonctionne pas chez moi...
et le dd n'est pas expliqué sur mon bouquin, il n'existe même pas :P -
Ok, mais alors a quoi correspond le 'dd' ?
-
non je ne crois pas que ce soit la même chose... moi pour le datediff il me demande 3 arguments.
j'ai le message suivant si je mets la requete que m'as dit :
SELECT ProductName, SUM(Quantity) AS TOTAL
FROM DeliveryDtls
WHERE (DATEDIFF(dd, CreateDate) = 0) AND (Quality LIKE 'S')
GROUP BY ProductName
[Microsoft][ODBC SQL Server Driver][SQL Server]The datediff function requires 3 arguments.
-
Justement je comprend comment tu utilise le datediff parce qu'il ne doit prend en compte que les deux premier parametre, autrement dit ca doit etre la même chose que :
WHERE (DATEDIFF(dd, CreateDate) = 0)
-
DateCreate correspond à la date de création de la ligne. On utilise un logiciel externe dans lequel on entre des données et chaque données est entrée dans la base de données SQL. Chaque produit que l'on entre dans ce logiciel correspond à une ligne dans la bdd.
C'est un peu fouilli mes explications.
datediff je l'écris comme ça dans ma requête :
WHERE (DATEDIFF(dd, CreateDate, '11/02/2005') = 0)
il faut que je signale que j'utilise une version anglaise de windows
-
Bon, je part, si demande tu as pas ta réponse, je continurai a chercher. ;-)
- 1
- 2