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
| SELECT
O.idOuvrage,
O.titre,
COUNT(DISTINCT idLivre) AS nbreLivres,
-- Livres invendus, des vendeurs dont le compte est actif
(SELECT COUNT(idLivre)
FROM
livres AS L
LEFT JOIN vendeurs AS E ON L.idVendeur = E.idVendeur
WHERE
dateVente IS NULL AND
idOuvrage = O.idOuvrage AND
-- TRUE pour un compte actif, FALSE pour un compte inactif
DATEDIFF(DATE_ADD(dateDerniereActivite, INTERVAL 2 YEAR), NOW()) >= 0
) AS nbreLivresActifs,
-- Livres invendus des vendeurs dont le compte est inactif
-- Notez que la sous-requête ci-dessous est quasiment identique à
-- la première à l'exception de la condition WHERE
(SELECT COUNT(idLivre)
FROM
livres AS L
LEFT JOIN vendeurs AS E ON L.idVendeur = E.idVendeur
WHERE
dateVente IS NULL AND
idOuvrage = O.idOuvrage AND
-- TRUE pour un compte inactif, FALSE pour un compte actif
DATEDIFF(DATE_ADD(dateDerniereActivite, INTERVAL 2 YEAR), NOW()) < 0
) AS nbreLivresInactifs,
GROUP_CONCAT(DISTINCT
CONCAT_WS(' ', A.prenom, A.nom)
ORDER BY A.nom
SEPARATOR ', '
) AS listeAuteurs
FROM ouvrages AS O
LEFT JOIN livres AS L ON O.idOuvrage = L.idOuvrage
LEFT JOIN ouvrages_auteurs AS OA ON O.idOuvrage = OA.idOuvrage
LEFT JOIN auteurs AS A ON OA.idAuteur = A.idAuteur
WHERE L.dateVente IS NULL
GROUP BY O.idOuvrage
ORDER BY O.titre |
Partager