0
votes

Alternative à la partie partielle (colonne non inanivée) du groupe par [Problème d'inventaire d'Ollivander sur Hackerrank]

J'essaie de résoudre HTTPS: //www.hackerrank. com / défis / Harry-Potter-and-Wands / Problème

Avec la configuration mySQL appropriée, on peut faire suite à xxx

mais la configuration MySQL de HackerRank n'autorise pas regroupement partiel. Il jette une erreur

Sélectionner la liste n'est pas en groupe par clause et ne contient pas non pas) colonne 'run_eootvjd0lna.w.id' qui ne dépend de pas fonctionnellement de colonnes en groupe par clause; Ceci est incompatible avec sql_mode = seulement_full_group_by

Je tiens donc à filtrer tous les doublons pour un code donné dans wands de table et laissez uniquement des lignes ayant des pièces minimales minimales_ned. De cette façon, je peux ensuite rejoindre wands_property sur la table extraite.

souhaite obtenir une suggestion sur l'extraction de lignes de monnaies minimales pertinentes, de sorte qu'elle puisse être utilisée plus loin. < / P>

PS: J'ai créé un SQLFiddle avec exemple Data ici < / p>


0 commentaires

3 Réponses :


0
votes

Je ne suis pas sûr de ne pas avoir raison

mais avec xxx

vous obtenez xxx

ceci est le résultat pour toutes les baguettes qui coûtent minimum pour chaque code qui n'est pas le mal sans le regrouper.


0 commentaires

0
votes

Voici mon EM> em> strong> de la solution (solution finale dans étape 3 em> strong>):

étape 1: em> strong> p>

filtres avec des pièces minimales nécessaires en fonction de la puissance et du code. Pourquoi CODE & POWER, car l'exigence souhaite que nous filtrons en fonction de l'âge et de l'énergie et que l'âge a une relation de 1-1 avec le code de sorte que le code et la puissance sont des endroits logiques pour filtrer p> xxx avant

étape 2: em> stry> p>

Utilisez cette table avec uniquement des lignes filtrées pour obtenir toutes les colonnes de la table des baguettes p>

select w.id, wp.age, w.code, min(w.coins_needed), w.power  from wands w
join (
        select w2.code, w2.power, min(w2.coins_needed) coins from wands w2
        group by w2.code, w2.power
      ) wcp
on wcp.code = w.code and wcp.power = w.power and wcp.coins = w.coins_needed
join wands_property wp
on wp.code = w.code and wp.is_evil=0
order by w.power desc, wp.age desc ;


0 commentaires

0
votes

@katch je pense dans la première instruction "SELECT" que vous n'avez pas besoin d'utiliser min sur pièces_needed depuis Min est déjà appliquée dans la sous-requête pour filtrer uniquement les plus petites pièces_need pour le même code et la même puissance, j'ai exécuté ce code et c'était accepté comme la bonne réponse Sélectionnez W.ID, P.AGE, W.Coins_Needed, W.`Power` à partir de wands w Inner Joindre (Sélectionnez W1.Code, W1.Power, Min (w1.Coin_needed) en tant que pièces de la WANDS W1 Group par code par code , puissance) comme w2 sur w.code = w2.code et w.coin_needed = w2.Coines et w.`power` = w2.`Opower` rejoindre interne wands_property p sur w.code = p.code où p.is_evil = 0 ordre by W.`Power` desc, P.AGE Desc


0 commentaires