2016-08-08 1 views
0

juste essayer de faire ce travail de recherche, mais il est un peu difficile pour moi ..avec la syntaxe SQL où ayant

SELECT 
    *, 
    COUNT(*) AS total FROM_UNIXTIME(consume_time,'%Y-%m') AS fecha 
FROM 
    coupon 
HAVING 
    fecha = '2016-07' 
GROUP BY 
    partner_id 
+0

mauvaise utilisation de 'HAVING' et erreur de syntaxe trouvée aussi. Essayez ceci: 'SELECT \t *, \t COUNT (*) AS totale, DATE_FORMAT (' consume_time', '% Y-% m') AS fecha coupon à partir de \t OÙ \t DATE_FORMAT ('consume_time', '% Y-% m ') =' 2016-07 ' GROUPE BY 'partner_id'' – 1000111

+0

Y at-il une erreur que vous obtenez? quel est le problème? c'est donner une erreur? les données ne sont pas retournées? les données correctes ne sont pas retournées? –

+0

Désolé, il me donne la colonne inconnue fecha dans WHERE la clause –

Répondre

0
  1. Vous manque un , dans la liste de sélection, entre AS total et FROM_UNIXTIME.

  2. HAVING filtres groupés ensembles, alors que WHERE filtres enregistrements avant d'être regroupés dans ce cas, vous voulez que celui-ci, mais alias comme fecha ne sont pas disponibles lorsque la clause WHERE est évaluée. Vous devez donc répéter l'expression sous-jacente dans la WHERE clause:

    WHERE FROM_UNIXTIME(consume_time,'%Y-%m') = '2016-07' 
    

    Cependant, cette approche ne serait pas sargable-mieux convertir votre littéral à une plage sur laquelle consume_time peut être directement filtré (en particulier si la table a un indice sur celui-ci):

    WHERE consume_time >= UNIX_TIMESTAMP('2016-07-01') 
        AND consume_time < UNIX_TIMESTAMP('2016-08-01') 
    

    encore mieux stocker consume_time comme un type temporel que MySQL comprend, par exemple, TIMESTAMP (qui se trouve être stocké en interne comme un horodatage Unix), plutôt qu'un simple entier, alors vous seriez en mesure de faire disparaître les fonctions de conversion au total:

    WHERE consume_time >= '2016-07-01' 
        AND consume_time < '2016-08-01' 
    
  3. Puisque vous groupant par partner_id , les valeurs de toute colonne du jeu de résultats qui ne dépendent pas de la fonction seront indéterminées. Ce n'est probablement pas ce que vous voulez. Vouliez-vous vraiment sélectionner toutes les colonnes, mais grouper par partner_id?