JMP Query Builder – comment appliquer la fonctionnalité « HAVING » ?Bonjour à tous, j'ai plusieurs requêtes SQL avec des fonctionnalités "HAVING". Je voudrais voir s'il peut être défini dans JMP Query Builder. J'ai cherché dans cette communauté, mais je n'ai pas vu de discussions à ce sujet (peut-être ai-je manqué ?). Je comprends qu'il existe une fonctionnalité SQL personnalisée qui peut être utilisée pour réaliser cette fonction. Mais le problème est que toutes les fonctionnalités interactives intéressantes de JMP Query Builder ne seront plus visibles. Je me demande simplement des commentaires/suggestions sur la configuration de la condition « HAVING » ? Le script SQL typique est le suivant. Seule la condition "HAVING" ne semble pas évidente à appliquer chez le constructeur. Vos idées seront appréciées!
SELECT column-names
FROM table-name
WHERE condition
GROUP BY column-names
<STRONG>AYANT un état</STRONG>
ORDER BY column-names
Accès aux donnéesRe : JMP Query Builder - comment appliquer la fonctionnalité "HAVING" ?Merci Brian pour la mise à jour. Oui, ce serait bien d'avoir cette amélioration dans les futures versions, mais ce n'est pas indispensable pour mes applications comme maintenant.Re : JMP Query Builder - comment appliquer la fonctionnalité "HAVING" ?Salut TG,
Il n'y a pas de HAVING caché dans Query Builder, désolé !Ce serait certainement une considération pour une amélioration. À l'heure actuelle, l'éditeur SQL personnalisé serait le seul moyen de l'utiliser, et comme vous l'avez souligné une fois que vous avez suivi cette voie, vous ne pouvez pas revenir en mode interactif.
Brian Corcoran
Développement JMP
Re : JMP Query Builder - comment appliquer la fonctionnalité "HAVING" ?Merci @ih . Cela aide beaucoup. Il n'y a donc pas de fonctionnalité "cachée" dans JMP Query Builder qui peut accomplir directement la condition "HAVING", qui équivaut au bouton "Filtrer" ou "Ordre". J'ai exécuté le tableau de test que vous avez joint dans ce fil. Oui, je pourrais obtenir le même résultat de requête que ce que vous avez montré. J'ai résumé 3 options dans JMP pour faire cette fonctionnalité "AVOIR": 1) Utiliser le chemin comme @ih mentionné, exécutez la requête personnalisée dans JMP Query Builder, notez que de cette manière aucun mot-clé "HAVING" dans le script de requête.2) Exécutez la requête personnalisée, avec le mot-clé HAVING dans le script. Ça marche pour moi. La requête personnalisée ressemble à ceci :
SELECT a.ID, a.val, Count (*) AS tot
FROM test a
GROUP BY a.val
HAVING ((Count (*)>1))
3) Utilisez JMP Query Builder, mais avec deux tables : l'une est la table "test", l'autre est la table récapitulative de la table "test" utilisant JMP "Summary" par colonne ("val"). De cette façon, les utilisateurs qui ne sont pas familiers avec les scripts SQL peuvent joindre les deux tables ci-dessus dans le générateur et utiliser "Filter" pour atteindre la condition "HAVING".
Notez que le dernier est le but initial. S'il existe des moyens d'éviter d'utiliser le 2e tableau récapitulatif et sans entrer dans une requête personnalisée, veuillez intervenir. Sinon je pense qu'on peut clore cette discussion.
Re : JMP Query Builder - comment appliquer la fonctionnalité "HAVING" ?Vous pouvez remplacer la clause HAVING en créant votre condition dans une deuxième requête, en la joignant à votre instruction select d'origine, puis en filtrant le résultat.Voici à quoi cela pourrait ressembler :
SELECT a.column-names
FROM table-name a
LEFT JOIN (SELECT condition-group-column, summary(condition-summarized-column) as condition
FROM table-name
GROUP BY condition-group-column) b
ON a.condition-column = b.condition-column
WHERE condition > 1;
Vous pouvez tester cela dans db-violon en utilisant ceci dans le schéma:
CREATE TABLE test (
id INT, val INT
);
INSERT INTO test (id, val) VALUES (1, 10);
INSERT INTO test (id, val) VALUES (2, 10);
INSERT INTO test (id, val) VALUES (3, 20);
INSERT INTO test (id, val) VALUES (4, 30);
INSERT INTO test (id, val) VALUES (5, 30);
et ceci dans le select:
SELECT a.ID, a.val, b.tot
FROM test a
LEFT JOIN (SELECT val, count(id) as tot
FROM test
GROUP BY val) b
ON a.val = b.val
WHERE tot > 1;
qui devrait ressembler à ceci :
