J'ai besoin d'aide pour une vue.Utiliser la sous-requête plusieurs fois
J'ai 2 tables que j'ai besoin de "fusionner" ensemble.
La première table contient des informations sur les produits (product-color-size), et les autres tableaux ont des informations sur les stocks, vendus, avilables (quantity) etc sur product-season-color-size niveau.
J'ai besoin de mon point de vue pour retourner le produit pr disponible. Le même produit-couleur-taille peut être plusieurs fois (Il peut être sur plusieurs saisons), et donc je ne peux pas faire une somme ex disponible.
Ma requête ressemble à ceci
SELECT
SUM((
SELECT
SUM(products_details.available)
FROM
products_details
WHERE
products_details.product_id = products.id
)) AS available
FROM
products
Mais, cela ne fonctionnera pas. Si une taille a 6 dans disponible et un autre a -5, la requête retournera 1 disponible. Mais, j'ai effectivement 6, je peux vendre.
donc je dois faire quelques ajustements
SELECT
SUM((
SELECT
SUM(
IF(
products_details.available > 0,
products_details.available,
0
)
)
FROM
products_details
WHERE
products_details.product_id = products.id
)) AS available
FROM
products
Mais, cela ne fonctionnera pas non. Si la taille a 6 disponibles sur une saison et -5 sur une autre, la requête retournera 6 disponibles. Mais, ces deux lignes j'ai besoin de faire la somme, parce que c'est le même produit. Par conséquent, il doit retourner 1 disponible.
Alors, je suis venu avec
SELECT
SUM(
IF(
(
SELECT
SUM(
IF(
products_details.available > 0,
products_details.available,
0
)
)
FROM
products_details
WHERE
products_details.product_id = products.id
) > 0,
(
SELECT
SUM(
IF(
products_details.available > 0,
products_details.available,
0
)
)
FROM
products_details
WHERE
products_details.product_id = products.id
),
0
)
) AS available
FROM
products
Mais, ce sera très (!!) lent. Puis-je utiliser en quelque sorte la même sous-requête plusieurs fois? Donc, je peux l'utiliser dans l'instruction If, et si c'est positif, je peux utiliser la même valeur à utiliser dans la somme?
Il est assez complexe, mais j'espère que quelqu'un peut me aider
/Mads
Modifier
Je viens de découvrir que je peux écrire
SELECT
SUM((
SELECT
IF(
SUM(products_details.available) > 0,
SUM(products_details.available),
0
)
FROM
products_details
WHERE
products_details.product_id = products.id
)) AS available
FROM
products
Cela pourrait fonctionner bien
Édition2
J'ai trouvé une nouvelle et beaucoup plus rapide pour l'écrire, et il fonctionne très bien :-)
SELECT
SUM(GREATEST(0,(
SELECT
SUM(products_details.available)
FROM
products_details
WHERE
products_details.product_id = products.id
))) AS available
FROM
products
GROUP BY
products.id
Ceci est très rapide - environ 10 sec juste au-dessus 1 sec.
Cela ne fonctionnera pas. J'ai besoin de SUM à travers les saisons (la taille peut être sur plusieurs saisons, mais j'ai besoin de la valeur SUMmed de celui-ci) ..J'aurais aimé (!) Utiliser join (je les utilise tout le temps), mais parce que j'ai besoin de SUM d'une manière spéciale, je ne peux pas l'utiliser de cette façon – Mads
Ah, j'ai mal lu cette restriction. Comment pouvez-vous identifier quel enregistrement 'product_details' est le bon? Dans votre exemple où l'un a 6 et l'autre a -5, comment puis-je dire que le 6 est le bon? – VoteyDisciple
Si je lis correctement vos échantillons, il s'agit simplement de mettre à zéro les valeurs négatives et de les additionner. J'ai fait cet ajustement à ma requête. – VoteyDisciple