Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1174 connectés 

 


Débat n°1




Attention si vous cliquez sur "voir les résultats" vous ne pourrez plus voter

 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  20  21  22  23  24  25
Auteur Sujet :

BlaBla@SQL

n°2342926
rufo
Pas me confondre avec Lycos!
Posté le 11-12-2019 à 13:25:24  profilanswer
 

Reprise du message précédent :

eclaireur a écrit :

Faire la mise en forme par le SGBD ça reste pas le top :/


C'est pas idiot sa bidouille. Il se sert de cette "mise en forme" pour juste récupérer les valeurs associées à a et la date/heure. Comme la date/heure est convertie en chaîne et est situées en début de chaîne, le MAX va faire une sorte de tri des chaînes obtenues par ordre alphabétique. Mécaniquement, ça sera celle qui a la date/heure la plus élevée qui va ressortir car stockée au format YYYYMMDDHHMMSS.
 
Je me note cette bidouille en tout cas. Dans certains cas, ça peut être plus intéressant qu'une autojointure avec sous-requête...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 11-12-2019 à 13:25:24  profilanswer
 

n°2342934
bosstime
H1N1 ready
Posté le 11-12-2019 à 15:59:55  profilanswer
 

Ca reste une bidouille :D
 
Le mieux est la 2ème version dans ce cas, window function mais en agrégeant sur la PK plutôt que le champs time. Ca évite d'avoir à coller un index sur time et sur des tables de plusieurs centaines de millions de lignes ca n'est pas négligeable.
 
Mais window function, ou table temporaire avec auto jointure, ca revient quasiment au même amha: Dans tous les cas tu dois agréger dans un premier temps et récupérer le reste ensuite. A confirmer avec le plan d'exécution :)
 

n°2343432
Profil sup​primé
Posté le 19-12-2019 à 17:06:37  answer
 

Salut, j'ai ressorti un vieux code que j'avais fait et j'aurai une question sur une base SQLite, me jugez pas je suis pas un pro  :o  
 
J'ai une table comme ceci :

Code :
  1. CREATE TABLE if not exists host(
  2.                 id INTEGER primary key unique,
  3.                 ip TEXT,
  4.                 ripe INTEGER,
  5.                 date TEXT DEFAULT CURRENT_TIMESTAMP,
  6.                 auth TEXT DEFAULT NULL,
  7.                 FOREIGN KEY(ripe) REFERENCES ripe(id) ON UPDATE CASCADE
  8.             );


J'ajoute (ou) met à jour un enregistrement avec une seul requête de ce style :

Code :
  1. SQL.execute('INSERT OR REPLACE INTO host (id, ip, ripe, date) VALUES ((SELECT id FROM host WHERE ip = ?), ?, ?, CURRENT_TIMESTAMP)', (address, address, routes[0]))


 Cela (me semble) correct et cela (semble) fonctionner .
 
 
Maintenant, sachant qu'un ip est unique dans mon cas,  
Est-ce que cela serait correct/similaire de plutôt faire :

Code :
  1. CREATE TABLE if not exists host(
  2.                 id INTEGER primary key unique,
  3.                 ip TEXT unique,
  4.                 ripe INTEGER,
  5.                 date TEXT DEFAULT CURRENT_TIMESTAMP,
  6.                 auth TEXT DEFAULT NULL,
  7.                 FOREIGN KEY(ripe) REFERENCES ripe(id) ON UPDATE CASCADE
  8.             );


Code :
  1. SQL.execute('INSERT OR REPLACE INTO host (ip, ripe, date) VALUES (?, ?, CURRENT_TIMESTAMP)', (address, routes[0]))


en gros, ça évite donc d’imbriquer 2 reqs ?! [:odµsseus:2]
 
 
Edit : wai bon hfr a fait péter toute la mise en page de mon post  :o  :o  :o

Message cité 1 fois
Message édité par Profil supprimé le 19-12-2019 à 17:12:07
n°2343433
eclaireur
Posté le 19-12-2019 à 17:09:31  profilanswer
 


 
Ta première solution est naze en effet.
 
La seconde est meilleure, mais en SQLlite tu peux mettre l’unicité comme contrainte externe à la table ?  
C’est plus facile à manier

n°2343439
Profil sup​primé
Posté le 19-12-2019 à 18:06:00  answer
 

J'ai refait la mise en page, ta contre question m'a un peu perdu par contre :o
Là je suis noyé dans 50 onglets d'ouverts à essayer de comprendre.
 
Je pense qu'à la base j'avais fait ça dans le but de faire un pseudo "INSERT OR UPDATE" qui n'existe pas, dans le but de conserver le même "id primary key" plutôt qu'en recréer un autre avec un "INSERT OR REPLACE" car à relire mon code tel qu'il est actuellement cela va posé des problèmes pour la suite.  
 
J'avais du m'inspirer d'une discussion du genre https://stackoverflow.com/questions [...] lse-update :D
Je vois qu'il existe UPSERT et qui pourrait peu être être la solution: https://stackoverflow.com/questions [...] -or-insert


Message édité par Profil supprimé le 19-12-2019 à 18:07:28
n°2343443
Profil sup​primé
Posté le 19-12-2019 à 18:58:48  answer
 

Je m’auto réponds, à priori en faisant comme ça, cela devrais être mieux / plus propre / suffisant, que l'original :

Code :
  1. CREATE TABLE if not exists host(
  2.                 ...
  3.                 ip TEXT unique,
  4.                 ...
  5.             );


 

SQL.execute('INSERT INTO host (ip, ripe, date) VALUES (?, ?, CURRENT_TIMESTAMP) ON CONFLICT(ip) DO UPDATE SET date = CURRENT_TIMESTAMP', (address, routes[0]))

n°2350440
TheCreator
zwiiiii and then shbrouk tak
Posté le 01-04-2020 à 18:40:16  profilanswer
 

c'est encore vivant comme topic ? :o
 
je mongolise sur du sql, pour trouver des lignes où un montant est faux, en calculant avec les autres colonnes ce qu'il devrait être.
 
innocemment j'ai fait :

Code :
  1. select amount, GrossAmount*quantity*(1+vatrate/100) as calc from payment where calc <> amount;


 
mais visiblement ça veut pas, il me dit que calc n'est pas une colonne.
 
donc j'ai stackoverflowé, et vu qu'il faut utiliser having, donc j'ai fait ça :
 

Code :
  1. select amount, GrossAmount*quantity*(1+vatrate/100) as calc from payment
  2. group by GrossAmount, quantity, vatrate, amount, paymentid
  3. having GrossAmount*quantity*(1+vatrate/100) <> amount


 
mais je ne comprends pas les résultats, il m'en sort plein qui ont l'air égaux, mais pas non plus toute la table. comme c'est uniquement des décimales, je me dit que c'est ptet un delta de précision...
 
par ex :

Code :
  1. amount calc
  2. 583,1 583,1


 
j'aimerais bien comprendre comment ne pas me faire piéger par ce deuxième cas :o


---------------
La superstition c'est comme ceux qui réparent les fauteuils, il faut que le bois qu'ils rajoutent soit à peu près comme l'autre bois sinon ça se voit trop.
n°2350441
flo850
moi je
Posté le 01-04-2020 à 18:44:07  profilanswer
 

tes colonnes ont quel type ?  


---------------

n°2350442
TheCreator
zwiiiii and then shbrouk tak
Posté le 01-04-2020 à 18:45:54  profilanswer
 

tout real sauf quantity int


---------------
La superstition c'est comme ceux qui réparent les fauteuils, il faut que le bois qu'ils rajoutent soit à peu près comme l'autre bois sinon ça se voit trop.
n°2350443
kao98
...
Posté le 01-04-2020 à 18:55:00  profilanswer
 

Having c'est quand tu regroupes avec group by

 

Les données de ton calcul sont toutes dans ta ligne ?

 

Ama il faut juste répéter le calcul dans la clause where, a la place d'utiliser l'alias


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
mood
Publicité
Posté le 01-04-2020 à 18:55:00  profilanswer
 

n°2350445
kao98
...
Posté le 01-04-2020 à 18:58:30  profilanswer
 

select amount, GrossAmount*quantity*(1+vatrate/100) as calc from payment where (GrossAmount*quantity*(1+vatrate/100)) <> amount;


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2350446
TheCreator
zwiiiii and then shbrouk tak
Posté le 01-04-2020 à 19:00:42  profilanswer
 

oui tout tient dans la ligne c'est vraiment tout con, c'est pour ça que je rage :o
 
comme l'alias ne marchait pas j'ai même pas pensé à juste c/c le calcul dans le where...


---------------
La superstition c'est comme ceux qui réparent les fauteuils, il faut que le bois qu'ils rajoutent soit à peu près comme l'autre bois sinon ça se voit trop.
n°2350447
TheCreator
zwiiiii and then shbrouk tak
Posté le 01-04-2020 à 19:02:16  profilanswer
 

ah ben effectivement ça marche comme ça, merci, par contre j'ai les mêmes résultats qui semblent incohérents qu'avec le group by having


---------------
La superstition c'est comme ceux qui réparent les fauteuils, il faut que le bois qu'ils rajoutent soit à peu près comme l'autre bois sinon ça se voit trop.
n°2350448
flo850
moi je
Posté le 01-04-2020 à 19:04:11  profilanswer
 

essaye de caster ta quantité en real.
ou fait Valeur absolue(ton_calcul- amount) > 0.01


---------------

n°2350449
TheCreator
zwiiiii and then shbrouk tak
Posté le 01-04-2020 à 19:12:45  profilanswer
 

merci, j'ai essayé des casts dans tous les sens mais j'ai toujours une diff de l'ordre de 10^-5 entre les deux valeurs

 

par contre en faisant un >0.01 sur la diff absolue je trouve bien le coupable, merci !


Message édité par TheCreator le 01-04-2020 à 19:12:59

---------------
La superstition c'est comme ceux qui réparent les fauteuils, il faut que le bois qu'ils rajoutent soit à peu près comme l'autre bois sinon ça se voit trop.
n°2350452
flo850
moi je
Posté le 01-04-2020 à 19:21:02  profilanswer
 

j'ai eu plusieurs projets ou je devais stocker de l'argent, et je l'ai stocké sous forme d'entier (en centimes pour un projet, en centième de centime pour un autre) pour ne pas avoir de soucis

Message cité 1 fois
Message édité par flo850 le 01-04-2020 à 19:21:45

---------------

n°2350461
kao98
...
Posté le 01-04-2020 à 20:29:50  profilanswer
 

flo850 a écrit :

j'ai eu plusieurs projets ou je devais stocker de l'argent, et je l'ai stocké sous forme d'entier (en centimes pour un projet, en centième de centime pour un autre) pour ne pas avoir de soucis


+1

 

En l'absence de type spécifique pour les valeurs monétaires (des serveurs sql le propose ?), Stocker des centimes (ou des millièmes si besoin) dans des int est une (très) bonne solution


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°2350467
Rasthor
Posté le 01-04-2020 à 21:07:42  profilanswer
 

Voila. Fait des comparaison égalité sur des float, c'est pas toujours génial.  
 
Exemple classique en python:
 

Code :
  1. >>> a = 0.1
  2. >>> b = 0.2
  3. >>> c = 0.3
  4. >>> a + b == c
  5. False
  6. >>> c
  7. 0.3
  8. >>> a + b
  9. 0.30000000000000004


 
https://docs.python.org/2/tutorial/floatingpoint.html

n°2350482
rufo
Pas me confondre avec Lycos!
Posté le 01-04-2020 à 22:12:47  profilanswer
 

Pour stocker des montants en BD, sous Mysql, j'utilise soit des int (effectivement bonne solution et bonnes perfs) soit le type DECIMAL(X.Y). Quand on manipule les TVA, il me semble que la règle comptable est de garder 4 chiffres après la virgule (pour éviter les erreurs de cumuls d'arrondis).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2350495
eclaireur
Posté le 01-04-2020 à 23:54:21  profilanswer
 

Le type MONEY sous SQL Server fait bien le job aussi :o

n°2351763
Profil sup​primé
Posté le 15-04-2020 à 12:36:54  answer
 

:hello: les pro du SQL.  
 
Voila mon soucis : Je me retrouve dans un sacré bordel car j'ai quitté mon précédent job pour un nouveau job qui a été annulé pour cause de COVID 19.
 
J'ai été en contact avec 2 recruteurs, une externe et un de la boite elle meme pour un poste de technical support pour un outil marketing d'une célèbre cogip internationale. Elles m'ont demandé mes connaissances en SQL. J'ai été honnête j'ai dis que j'avais juste des connaissances basics. En gros chercher les infos dans la database via des queries. Chose que je faisais dans mon ancien job.  Et aussi un peu de MySQL datant de 2004 environ quand je faisais du PHP My SQL de manière ultra basique ainsi que du HTML, un peu de javascript etc (j'avais appris les bases dans une formation webdesign)
 
Et voila que je reçois l'invitation pour l'interview et sur la description du poste :  
 

Citation :


Experience writing and debugging SQL statements, XML/Javascript/HTML are required.
Experience with one or more database platforms (Oracle, SQL, MySQL, or PostgreSQL) is required.
Experience with web services APIs, database connectors, SOAP
Proven in depth of knowledge of complex, database-centric, internet-based systems with at least 20% of your time spent solving with SQL and relational databases challenges.


 
Est ce que vous pensez ca faisable d'apprendre ca en quelques jours (5 jours) :o Ou vaut mieux que j'annule totalement cet entretien pour ne pas perdre la face :o Je suis preneuse pour toutes resources ou conseils si vous pensez que c'est faisable.  
Je suis la formation sur Udemy : The Complete Oracle SQL Certification Course pour le moment :  
 
https://www.udemy.com/course/the-co [...] on-course/

n°2351767
skeye
Posté le 15-04-2020 à 13:30:04  profilanswer
 

Quel risque à voir ce que ça donne en entretien?


---------------
Can't buy what I want because it's free -
n°2351768
Profil sup​primé
Posté le 15-04-2020 à 13:39:58  answer
 

J'ai peur de me griller pour des postes qui auraient pu être à ma portée... C'est une grosse cogip. :o

n°2351769
eclaireur
Posté le 15-04-2020 à 13:40:39  profilanswer
 

Oui, va à l'entretien dans tous les cas.
 
Sinon, ne te focus pas sur un SGBD en particulier, prends un tutoriel simple sur SQL sur le net qui t'apprendra les bases (tables, syntaxe, jointures, order, where etc etc....), il y en a beaucoup de gratos.
 
On te demandera sûrement pas l'analyse du vecteur de cardinalité d'une requête victime de son parameter sniffing :o

n°2351772
rufo
Pas me confondre avec Lycos!
Posté le 15-04-2020 à 13:48:02  profilanswer
 

Le SQL, c'est pas très compliqué ; les SGBDR ont quand même un % important en commun. Après, ben y'a la donc en ligne pour trouver dont tu as besoin ou son nom chez un autre SGBD par rapport à Mysql. Les connecteurs (j'imagine, des trucs genre ODBC ou autre outil d'abstraction de BD), c'est généralement juste un peu de conf. Le XML/Javascript/HTML, tu dis en avoir fait, donc tu ne devrais pas être trop perdue. Un petit tour sur openClassroom pour voir les principales évolutions.
SOAP, c'est du web service via XML. Là, ça va demander un peu plus de temps si tu ne connais pas du tout. Le plus problématique risque d'être "Proven in depth of knowledge of complex, database-centric, internet-based systems with at least 20% of your time spent solving with SQL and relational databases challenges. " --> ça, c'est l'expérience acquise sur des systèmes en prod, c'est pas avec des tutos en ligne que tu vas pouvoir l'acquérir. Toutefois, comme Skeye, je te recommande de faire l'entretien. Souvent, ceux qui cherchent un profil demandent le mouton à 5 pattes ou largement plus que ce dont ils ont réellement besoin (par contre bizarrement, le salaire proposé est plutôt sous-évalué par rapport au coût réel  :whistle: ).
Si t'es bien câblée et que le projet n'est pas trop tendu niveau délai, tu peux acquérir rapidement les connaissances nécessaires. Ca posera pas de pb.
 
Il m'arrive de faire des recrutements. Perso, je préfère largement une personne bien câblée dans sa tête (i.e. être autonome, travailleuse/sérieuse, dégourdie, qui comprend vite les choses et a un bon relationnel...) mais avec pas forcément un gros niveau technique plutôt qu'une personne forte techniquement mais qui n'est pas autonome, doit être fliquée constamment sinon n'avance pas, on doit tout lui dire quoi faire et comme faire, s'intègre mal en équipe ou chez le client... Des compétences techniques, ça s'apprend (et vite si la personne est volontaire et bien câblée) ; des compétences humaines comme celles que j'ai citées, non, c'est la personnalité et ça se change pas facilement :o
 
Donc, au pire, tu perds et tu fais perdre 30 min à 1h à toi et une ou 2 personnes, au mieux, t'as un boulot ;) Mise sur tes compétences humaines et démontre que tu apprends vite et que tu es motivée (si c'est le cas, évidemment et que le boulot proposé te plaît).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2351773
Profil sup​primé
Posté le 15-04-2020 à 14:19:20  answer
 

eclaireur a écrit :


 
On te demandera sûrement pas l'analyse du vecteur de cardinalité d'une requête victime de son parameter sniffing :o


 [:max evans]  [:max evans]  [:max evans]   :whistle:  
 

rufo a écrit :

Le SQL, c'est pas très compliqué ; les SGBDR ont quand même un % important en commun. Après, ben y'a la donc en ligne pour trouver dont tu as besoin ou son nom chez un autre SGBD par rapport à Mysql. Les connecteurs (j'imagine, des trucs genre ODBC ou autre outil d'abstraction de BD), c'est généralement juste un peu de conf. Le XML/Javascript/HTML, tu dis en avoir fait, donc tu ne devrais pas être trop perdue. Un petit tour sur openClassroom pour voir les principales évolutions.
SOAP, c'est du web service via XML. Là, ça va demander un peu plus de temps si tu ne connais pas du tout. Le plus problématique risque d'être "Proven in depth of knowledge of complex, database-centric, internet-based systems with at least 20% of your time spent solving with SQL and relational databases challenges. " --> ça, c'est l'expérience acquise sur des systèmes en prod, c'est pas avec des tutos en ligne que tu vas pouvoir l'acquérir. Toutefois, comme Skeye, je te recommande de faire l'entretien. Souvent, ceux qui cherchent un profil demandent le mouton à 5 pattes ou largement plus que ce dont ils ont réellement besoin (par contre bizarrement, le salaire proposé est plutôt sous-évalué par rapport au coût réel  :whistle: ).
Si t'es bien câblée et que le projet n'est pas trop tendu niveau délai, tu peux acquérir rapidement les connaissances nécessaires. Ca posera pas de pb.
 
Il m'arrive de faire des recrutements. Perso, je préfère largement une personne bien câblée dans sa tête (i.e. être autonome, travailleuse/sérieuse, dégourdie, qui comprend vite les choses et a un bon relationnel...) mais avec pas forcément un gros niveau technique plutôt qu'une personne forte techniquement mais qui n'est pas autonome, doit être fliquée constamment sinon n'avance pas, on doit tout lui dire quoi faire et comme faire, s'intègre mal en équipe ou chez le client... Des compétences techniques, ça s'apprend (et vite si la personne est volontaire et bien câblée) ; des compétences humaines comme celles que j'ai citées, non, c'est la personnalité et ça se change pas facilement :o
 
Donc, au pire, tu perds et tu fais perdre 30 min à 1h à toi et une ou 2 personnes, au mieux, t'as un boulot ;) Mise sur tes compétences humaines et démontre que tu apprends vite et que tu es motivée (si c'est le cas, évidemment et que le boulot proposé te plaît).


 
Merci pour vos réponses et conseils  :jap:  
 
J'avais vraiment dit que je n'étais pas developeuse  après j'imagine que les developers ne sont pas forcément enclin à faire du tech support, et donc à faire du relationnel :o donc cela va peut être aidé.  
Moi mon problème et force à la fois c'est que je touche à tout mais cela fait que je n'ai pas de connaissances approfondies... Hormis en spam et scam sachant que j'ai bossé pour une cogip  pendant 3 ans sur le sujet. Mais c'était ultra spécifique. Les queries qu'on faisait étaient pour analyser les datas et detecter les possibles abus ou erreur d'automation. Malheureusement ces jobs sont rares de part leur spécificités surtout depuis le Covid...  
 
Les experiences en support que j'ai hormis mon précédents job qui était spécialisé c'était des problèmes assez simple genre login issue ou aider à trouver la documentation techniques nécessaires dont les utilisateurs pouvaient avoir besoin,  pour une cogip fruitée.  :whistle:  
 
La le job me parait interessant de part ce que je vais apprendre.  
 

n°2351774
eclaireur
Posté le 15-04-2020 à 14:32:28  profilanswer
 


 
 
 
Alors plutôt que d'être centrée sur la technique, montre que tu es motivée pour apprendre, et va faire l'entretien.
 
Y'a un topic dédié d'ailleurs sur le sujet :o

n°2351833
masklinn
í dag viðrar vel til loftárása
Posté le 16-04-2020 à 08:59:12  profilanswer
 

Si j’ai deux tables A et B avec un lien *-n entre les deux (1-n ou m-n), je veux sélectionner les A qui ont au moins un B répondant à un jeu de critères, mais je veux pas de duplicats. Il y a une autre option que join + distinct ou subquery (exists ou a_id in (select a_id from b where …))?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2351835
skeye
Posté le 16-04-2020 à 09:03:04  profilanswer
 

masklinn a écrit :

Si j’ai deux tables A et B avec un lien *-n entre les deux (1-n ou m-n), je veux sélectionner les A qui ont au moins un B répondant à un jeu de critères, mais je veux pas de duplicats. Il y a une autre option que join + distinct ou subquery (exists ou a_id in (select a_id from b where …))?


Ca dépend, tu veux une autre option intelligente, ou une autre option quelle qu'elle soit? :D


---------------
Can't buy what I want because it's free -
n°2351836
eclaireur
Posté le 16-04-2020 à 09:09:07  profilanswer
 

masklinn a écrit :

Si j’ai deux tables A et B avec un lien *-n entre les deux (1-n ou m-n), je veux sélectionner les A qui ont au moins un B répondant à un jeu de critères, mais je veux pas de duplicats. Il y a une autre option que join + distinct ou subquery (exists ou a_id in (select a_id from b where …))?


 
Une jointure

n°2351837
skeye
Posté le 16-04-2020 à 09:09:26  profilanswer
 

Un truc de ce genre est une autre option qui doit fonctionner, mais c'est idiot a priori.[:doc petrus]
 

Code :
  1. SELECT *
  2. FROM a
  3. LEFT OUTER JOIN (SELECT a.id FROM a LEFT OUTER JOIN b ON a.id = b.idA WHERE b.id IS NULL) t ON a.id = t.id
  4. WHERE t.id IS NULL;


---------------
Can't buy what I want because it's free -
n°2351838
rufo
Pas me confondre avec Lycos!
Posté le 16-04-2020 à 09:20:08  profilanswer
 

Je suis pas sûr que le WHERE b.id IS NULL va marcher. Moi, je l'aurais mis dans le HAVING.
 
SELECT a.id, b.idA FROM a LEFT JOIN b ON (a.id = b.idA) GROUP BY a.id HAVING b.idA IS NOT NULL
 
Bon, au niveau perfs, c'est horrible, mais ça doit marcher (en tout cas, ça marche en Mysql) :D
Perso, j'utilise de préférence le group by plutôt que le distinct car on peut obtenir le même résultat mais group by va plus vite, donc c'est cool si on veut des perfs.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2351842
flo850
moi je
Posté le 16-04-2020 à 09:44:32  profilanswer
 

Ca fonctionne dans le where, Having est uniquement utile pour les filtrer sur les résultats après GROUP  (count, max, min, ....)


---------------

n°2351844
masklinn
í dag viðrar vel til loftárása
Posté le 16-04-2020 à 10:12:38  profilanswer
 


Une jointure renvoie un résultat pour chaque (a, b) qui match, donc s’il y a plusieurs b pour le même a, a est dupliqué.  

skeye a écrit :

Un truc de ce genre est une autre option qui doit fonctionner, mais c'est idiot a priori.[:doc petrus]

Code :
  1. SELECT *
  2. FROM a
  3. LEFT OUTER JOIN (SELECT a.id FROM a LEFT OUTER JOIN b ON a.id = b.idA WHERE b.id IS NULL) t ON a.id = t.id
  4. WHERE t.id IS NULL;



[:implosion du tibia]
 
Bon je sais pas si faire un join sur une subquery c’est du moindre intérêt mais gg, et je peux garder ce truc pour faire chier des collègues.

Message cité 1 fois
Message édité par masklinn le 16-04-2020 à 10:13:20

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2351846
skeye
Posté le 16-04-2020 à 10:34:21  profilanswer
 

masklinn a écrit :


[:implosion du tibia]
 
Bon je sais pas si faire un join sur une subquery c’est du moindre intérêt mais gg, et je peux garder ce truc pour faire chier des collègues.


 
La jointure avec une sous-requête j'ai déjà fait sur de vrais cas, oui...bon, pas sur un truc de ce genre évidemment...:D


---------------
Can't buy what I want because it's free -
n°2351860
masklinn
í dag viðrar vel til loftárása
Posté le 16-04-2020 à 12:55:07  profilanswer
 

skeye a écrit :


 
La jointure avec une sous-requête j'ai déjà fait sur de vrais cas, oui...bon, pas sur un truc de ce genre évidemment...:D


Je voulais dire par rapport à juste une sous requête ofc, il y a des cas ou le join sur la sous requête est la bonne chose à faire (je présume).


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2351861
skeye
Posté le 16-04-2020 à 13:04:57  profilanswer
 

J'ai surtout utilisé pour des requêtes très complexes pour découper le problème, en fait...sur des trucs où les perfs ne sont "pas importantes". Donc aucune idée des cas dans lesquels c'est "mieux", finalement...:D


Message édité par skeye le 16-04-2020 à 13:05:12

---------------
Can't buy what I want because it's free -
n°2353044
LeRiton
Posté le 01-05-2020 à 16:40:04  profilanswer
 

Yo :o
 
Soit la table 'test', avec id, fk_id, youpla_date, nullable_col.
 
Je veux retenir  
#1 toutes les lignes qui matchent nullable_col IS NULL
ET
#2 celles qui, pour un fk_id qui a déjà matché la condition #1, ont une youpla_date ultérieure à celle de la ligne qui a matché #1 et ce même si la ligne a nullable_col renseigné.
 
Je sais pas si c'est clair  [:clooney41]  
 
Je tente

Code :
  1. SELECT *
  2.  FROM test AS t1
  3.  LEFT JOIN test AS t2 ON t2.fk_id = t1.fk_id AND t2.youpla_date > t1.youpla_date
  4. WHERE t1.nullable_col IS NULL


mais le WHERE élimine également les lignes de #2.
 
A vot' bon cœur [:romf]

n°2353045
flo850
moi je
Posté le 01-05-2020 à 16:55:00  profilanswer
 

LEFT JOIN test AS t2 ON t2.fk_id = t1.fk_id AND ( t2.youpla_date > t1.youpla_date OR t1.nullable_col IS NULL )  
 


---------------

n°2353074
LeRiton
Posté le 02-05-2020 à 10:29:02  profilanswer
 

flo850 a écrit :

LEFT JOIN test AS t2 ON t2.fk_id = t1.fk_id AND ( t2.youpla_date > t1.youpla_date OR t1.nullable_col IS NULL )

 



Nickel, merci !

n°2353942
Rasthor
Posté le 18-05-2020 à 11:44:52  profilanswer
 

Hello!
 
Question de perf:
 
Je charge une table complète (2.5 millions de lignes, 19 colonnes) dans pandas (pd.read_sql_query(SELECT * FROM table)).
 
Cela met 1 minute. Est-ce que cela vous semble lent ou ok ? :??:
 

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  20  21  22  23  24  25

Aller à :
Ajouter une réponse
 

Sujets relatifs
Requete SQL de selection complexe[SQL SERVER] Ajout d'une colonne en PS...mais inutilisable
[ODBC] DSN pour se connecter à une base SQL[PDO/SQL] Aide selection et classement (JOIN ??)
Problème conditions requete SQLSQL/PHP BDD de réservation de chambres
Jointure 'LIKE' SQL => BOtable SQL Ajouter une colonne au lieu de creer une nouvelle table
Requête SQL complexe 
Plus de sujets relatifs à : BlaBla@SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR