SUM .... oui mais comment ... ? - SQL/NoSQL - Programmation
Marsh Posté le 29-12-2006 à 08:21:18
en lisant en diagonale ta requete vires le R1.DUREE_MN de ton group by
Marsh Posté le 29-12-2006 à 10:57:02
SELECT M.PSEUDO, M.CLASSE, SUM(hour(DI.DATE_FIN-DI.DATE_DEBUT)*60 + minute(DI.DATE_FIN-DI.DATE_DEBUT) - (DATEDIFF(DI.DATE_FIN, DI.DATE_DEBUT)*4560)) AS NB_DKP 
FROM dkp_in DI, membres M 
WHERE M.ID = DI.ID_MEMBRE 
AND M.ACTIF = 1 
AND DI.ACTIF = 1 
GROUP BY M.PSEUDO, M.CLASSE   
LIMIT 0,100
Marsh Posté le 29-12-2006 à 11:45:59
merci pour ces réponses. 
 
J'ai essayé vos 2 solutions mais j'ai le meme résultat qu'avec ma première solution. C'est assez bizarre  
 
 
Je peux vous fournir le script si vous voulez pour essayer : 
 
-- phpMyAdmin SQL Dump 
-- version 2.9.0.3 
-- http://www.phpmyadmin.net 
--  
-- Serveur: localhost 
-- Généré le : Vendredi 29 Décembre 2006 à 11:45 
-- Version du serveur: 5.0.27 
-- Version de PHP: 5.2.0 
--  
-- Base de données: `dkp` 
--  
 
-- -------------------------------------------------------- 
 
--  
-- Structure de la table `dkp_in` 
--  
 
CREATE TABLE `dkp_in` ( 
  `ID` bigint(20) NOT NULL auto_increment, 
  `DATE_DEBUT` datetime NOT NULL, 
  `DATE_FIN` datetime NOT NULL, 
  `LIBELLE_RAID` varchar(250) NOT NULL, 
  `ID_MEMBRE` bigint(20) NOT NULL, 
  `ACTIF` smallint(6) NOT NULL default '1', 
  PRIMARY KEY  (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; 
 
--  
-- Contenu de la table `dkp_in` 
--  
 
INSERT INTO `dkp_in` (`ID`, `DATE_DEBUT`, `DATE_FIN`, `LIBELLE_RAID`, `ID_MEMBRE`, `ACTIF`) VALUES  
(1, '2006-12-28 15:00:36', '2006-12-28 16:30:36', 'Molten Core', 1, 1), 
(2, '2006-12-20 20:06:33', '2006-12-20 23:16:33', 'BWL', 1, 1), 
(3, '2006-12-20 23:06:33', '2006-12-21 01:06:33', 'BWL', 4, 1); 
 
-- -------------------------------------------------------- 
 
--  
-- Structure de la table `dkp_out` 
--  
 
CREATE TABLE `dkp_out` ( 
  `ID` bigint(20) NOT NULL auto_increment, 
  `ID_RAID` bigint(20) NOT NULL, 
  `ID_MEMBRE` bigint(20) NOT NULL, 
  `ID_ITEM` bigint(20) NOT NULL, 
  `DKP_DEPENSE` int(11) NOT NULL default '0', 
  PRIMARY KEY  (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
 
--  
-- Contenu de la table `dkp_out` 
--  
 
 
-- -------------------------------------------------------- 
 
--  
-- Structure de la table `membres` 
--  
 
CREATE TABLE `membres` ( 
  `ID` bigint(20) NOT NULL auto_increment, 
  `PSEUDO` varchar(150) NOT NULL, 
  `CLASSE` varchar(100) NOT NULL, 
  `ACTIF` tinyint(4) NOT NULL default '1', 
  PRIMARY KEY  (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; 
 
--  
-- Contenu de la table `membres` 
--  
 
INSERT INTO `membres` (`ID`, `PSEUDO`, `CLASSE`, `ACTIF`) VALUES  
(1, 'Dragonaute', 'MAGE', 1), 
(2, 'Kpcube', 'DEMONISTE', 1), 
(3, 'Guertly', 'VOLEUR', 1), 
(4, 'Zynie', 'DRUIDE', 1), 
(5, 'Ratchet', 'GUERRIER', 1), 
(6, 'Chassetou', 'CHASSEUR', 1); 
 
Merci par avance à vous tous 
Marsh Posté le 29-12-2006 à 12:16:08
En fait, aucune erreur mais juste 0 enregistrements retournés
Marsh Posté le 29-12-2006 à 12:44:05
es tu sûr qu'il y a bien des enregistrements dans tes tables ?
Marsh Posté le 29-12-2006 à 13:31:43
Ecris la requête par étapes, d'abord la jointure, puis le group by, et vérifie les lignes retournées ...
Marsh Posté le 28-12-2006 à 17:17:55
Bonjour,

Je suis sous MYSQL et je cherche a effectuer la somme d'une collone (DUREE_MN) contenue dans la requete suivante :
SELECT M.PSEUDO, M.CLASSE, (hour(DI.DATE_FIN-DI.DATE_DEBUT)*60 + minute(DI.DATE_FIN-DI.DATE_DEBUT) - (DATEDIFF(DI.DATE_FIN, DI.DATE_DEBUT)*4560)) AS DUREE_MN
FROM dkp_in DI, membres M
WHERE M.ID = DI.ID_MEMBRE
AND M.ACTIF = 1
AND DI.ACTIF = 1
ORDER BY PSEUDO
le résultat est le suivant :
PSEUDO CLASSE DUREE_MN
Toto MAGE 90
Toto MAGE 190
Dupond DRUIDE 120
En fait, je souhaiterais avoir ce résultat :
PSEUDO CLASSE DUREE_MN
Toto MAGE 280
Dupond DRUIDE 120
J'ai essayé de faire ca mais ca ne marche pas !!!
SELECT R1.PSEUDO, R1.CLASSE, SUM(R1.DUREE_MN) AS NB_DKP FROM
(
SELECT M.PSEUDO, M.CLASSE, DI.ID_MEMBRE, DI.DATE_DEBUT, DI.DATE_FIN, DI.LIBELLE_RAID, (hour(DI.DATE_FIN-DI.DATE_DEBUT)*60 + minute(DI.DATE_FIN-DI.DATE_DEBUT) - (DATEDIFF(DI.DATE_FIN, DI.DATE_DEBUT)*4560)) AS DUREE_MN
FROM dkp_in DI, membres M
WHERE M.ID = DI.ID_MEMBRE
AND M.ACTIF = 1
AND DI.ACTIF = 1
ORDER BY PSEUDO
) R1
GROUP BY R1.PSEUDO, R1.DUREE_MN, R1.CLASSE
LIMIT 0,100
Je vous remercie par avance de vos réponses
Message édité par locas le 28-12-2006 à 17:18:33