简体   繁体   中英

How to order by number of sold products during a date?

I need to order a result by number of sold products.

Here is an extract from my (complex) SQL:

SELECT ....
SUM(products.quantity) as numberSold,

....
ORDER by numberSold

How can I order by sold items ONLY during this year ?

I tried with

HAVING products.products.date>'01-01-2015', but it affcts the number of returned rows.

Here is the indigest SQL I did not write and that I have to change:

Select Distinct
  boutique_produit.*,
  boutique_produit_description.*,
  boutique_produit_plus.*,
  Sum(boutique_commande_detail.quantite) As numberSold

From
  boutique_categorie Inner Join
  boutique_categorie_produit On boutique_categorie_produit.boutique_categorie_id
    = boutique_categorie.id_boutique_categorie Inner Join
  boutique_produit On boutique_produit.id_boutique_produit =
    boutique_categorie_produit.boutique_produit_id And
    boutique_produit.zone_id = boutique_categorie_produit.zone_id Inner Join
  boutique_produit_description
    On boutique_produit_description.boutique_produit_id =
    boutique_produit.id_boutique_produit And
    boutique_produit_description.zone_id = boutique_categorie_produit.zone_id
    And (boutique_produit_description.boutique_langue_disponible_code = 'FR')
  Inner Join
  boutique_produit_reference On boutique_produit_reference.boutique_produit_id =
    boutique_produit.id_boutique_produit And boutique_produit_reference.zone_id
    = boutique_categorie_produit.zone_id Inner Join
  boutique_produit_reference_prix
    On boutique_produit_reference_prix.boutique_produit_reference_id =
    boutique_produit_reference.id_boutique_produit_reference And
    boutique_produit_reference_prix.zone_id = boutique_categorie_produit.zone_id
  Inner Join
  boutique_taxe On boutique_taxe.id_boutique_taxe =
    boutique_produit_reference.boutique_taxe_id Inner Join
  boutique_produit_plus On boutique_produit_plus.boutique_produit_id =
    boutique_produit.id_boutique_produit And boutique_produit_plus.zone_id =
    boutique_categorie_produit.zone_id Inner Join
  boutique_produit_plus_categories
    On boutique_produit_plus_categories.boutique_produit_id =
    boutique_produit_plus.boutique_produit_id And
    boutique_produit_plus_categories.zone_id = boutique_produit_plus.zone_id And
    (boutique_produit_plus_categories.categorie_id In (1750, 1227, 1880))
  Inner Join
  poi On boutique_produit_plus.poi_id = poi.ID_poi And poi.zone_id =
    boutique_categorie_produit.zone_id And (((poi.payant = 1 And
        ('2015-12-10' >= poi.dateDebutValidite) And ('2015-12-10' <=
          poi.dateFinValidite)) Or (poi.illimite = 1))) Inner Join
  boutique_professionnel On poi.boutique_professionnel_id =
    boutique_professionnel.id_boutique_professionnel And
    boutique_professionnel.zone_id = poi.zone_id And
    (boutique_professionnel.compte_actif = 1) Left Join
  boutique_commande_detail
    On boutique_commande_detail.boutique_produit_reference_id =
    boutique_produit_reference.id_boutique_produit_reference And
    boutique_commande_detail.zone_id = boutique_categorie_produit.zone_id
Where
  boutique_categorie_produit.boutique_categorie_id = 382 And
  (boutique_produit_plus.date_fin_valid = '' Or
    boutique_produit_plus.date_fin_valid Is Null Or
    boutique_produit_plus.date_fin_valid >= '2015-12-10 23:59:59') And
  boutique_produit.produit_actif = 1 And
  boutique_categorie_produit.zone_id = 4
Group By
  boutique_produit.id_boutique_produit, boutique_produit.zone_id

Order By
  numberSold Desc
Limit 0, 60

numberSold is the IMPORTANT field

在products.date上使用WHERE子句

If I understand you correctly, you want to sum products.quantity only when products.date>'01-01-2015' , and if the date is lower you want to exclude that quantity? Then try CASE .

SELECT ....
SUM(CASE WHEN products.date>'01-01-2015' THEN products.quantity
         ELSE 0 
    END) as numberSold,

....
ORDER by numberSold

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM