Je ne suis pas doué pour les requêtes SQL, alors j'ai pensé que je demanderais ici. J'ai une table ma_table :
REMARQUE : Considérez toutes les colonnes comme des chaînes . Je les représente simplement sous forme de nombres ici pour une meilleure compréhension.
A B C ----- 1 2 3 2 5 6
Je veux que le résultat soit-
A B C ----- 1 2 3 2 2 3 2 5 6 3 5 6
Donc, en gros, supprimer les paires en double pour B, C , et en prenant la première occurrence de A pour cette paire de B, C .
4 Réponses :
Tout d'abord, vous feriez mieux de publier une partie de ce que vous avez essayé ici.
Dans mysql 8.0 , vous pouvez utiliser row_number () over (partition par B, C ordre par A) pour résoudre cette question.
â A | B | C -: | -: | -: 2 | 2 | 3 2 | 5 | 6
SET @rownum:=0; select `A`, `B`, `C` from ( select *,row_number() over (partition by `B`, `C` order by rownum) rnk from ( select *,@rownum:=@rownum+1 AS rownum from Table1 ) T ) T where rnk = 1;CREATE TABLE Table1 (`A` int, `B` int, `C` int) ; INSERT INTO Table1 (`A`, `B`, `C`) VALUES (2, 2, 3), (1, 2, 3), (2, 5, 6), (3, 5, 6) ;
db fiddle ici em>
si mysql vous pouvez suivre cette réponse ROW_NUMBER () dans MySQL
si comme @forpas dit: en prenant la première occurrence de A pour cette paire de B, C n'est pas résolu par ordre par A.
Vous devez d'abord trier le rownum:
A | B | C -: | -: | -: 1 | 2 | 3 2 | 5 | 6
select `A`, `B`, `C` from ( select *,row_number() over (partition by `B`, `C` order by `A`) rnk from Table1 ) T where rnk = 1;CREATE TABLE Table1 (`A` int, `B` int, `C` int) ; INSERT INTO Table1 (`A`, `B`, `C`) VALUES (1, 2, 3), (2, 2, 3), (2, 5, 6), (3, 5, 6) ;
db fiddle ici em>
prendre la première occurrence de A pour cette paire de B, C n'est pas résolu par order by A .
Vous semblez vouloir une agrégation:
select min(a) as a, b, c from t group by b, c;
Je suppose que "premier" signifie la valeur minimale de a . Les tables SQL représentent des ensembles non ordonnés, donc cela semble être l'interprétation la plus sensée.
prendre la première occurrence de A pour cette paire de B, C n'est pas résolu par min (A)
Il semble que vous deviez prendre en compte le minimum de la colonne A et le regroupement par B et C :
select min(cast(A as unsigned)) as A, cast(B as unsigned) as B, cast(C as unsigned) as C from my_table group by B , C
La conversion
cast ( est utilisée pour les rendre numériques.
Je suis désolé si vous n'avez pas lu la NOTE que j'ai. Toutes les colonnes sont des chaînes
prendre la première occurrence de A pour cette paire de B, C n'est pas résolu par min (A)
Eh bien, utilisez cast comme non signé puis @kev
select min(A) as A,B,C from Table1 group by B,C As, you requested this will get the minimum value of A for combinations of B and C.
prendre la première occurrence de A pour cette paire de B, C n'est pas résolu par min (A)
Bienvenue dans StackOverflow! N'hésitez pas à consulter la visite ou la Aide pour savoir comment poser des questions. Demander quelque chose comme "Je veux faire xyz" sans aucune tentative de code incluse ou des informations sur les erreurs que vous avez obtenues, les exemples de données et les résultats souhaités est susceptible d'être fermé en raison du manque d'informations pour répondre. N'oubliez pas d'ajouter tout le code pertinent, les journaux d'erreurs et tout ce qui se trouve dans votre question sous forme de texte brut, afin que nous puissions vous aider. :)
Existe-t-il également une colonne comme
id?y a-t-il une règle pour commander?
@forpas pas d'autre colonne
@ BarbarosÖzhan pas de règle pour la commande, vous pouvez commander le résultat final comme vous le souhaitez
Modifiez le schéma de votre table pour ajouter une colonne à incrémentation automatique. Ensuite, il est facile de prendre la 1ère occurrence .
L'ajout d'une valeur d'auto-incrémentation (comme
forpas) suggérée rendra le problème beaucoup plus facile et plus simple. Mais voulez-vous VRAIMENT la première valeur de A? de la valeur minimale de A (voir la réponse ci-dessous)?