Trois styles de classement - mise en œuvre du traitement des résultats des requêtes MySQL

Table d'opération :
Insérer la description de l'image ici
données de la table utilisateur :

Insérer la description de l'image ici

Condition requise : Nous devons classer le champ du sexe par âge, les plus jeunes devant et les plus âgés derrière.
1. Ajoutez un numéro de série aux résultats de la requête à l'aide d'instructions SQL

Cette méthode consiste à utiliser SQL pour traiter les données triées et ajouter un numéro de série distinct.

// (SELECT @i:=0)j 声明一个变量(注意,如果声明的变量是关键字则会异常),变量初始值为 0,每次让它+1
// 声明一个变量 (@i:=@i+1)"字段”
SELECT (@i:=@i+1)"序号", u.* FROM 表名 u,(SELECT @i:=0)j

Méthode de déclaration d'exception : la commande Rank ne peut pas être utilisée

SELECT (@i:=@i+1)"序号", u.* FROM user u,(SELECT @i:=0)rank

Insérer la description de l'image ici

  • Exemple 1 : valeurs cibles non triées

Insérer la description de l'image ici
Comme vous pouvez le voir ici, le numéro de série est déjà là, mais notre champ sexe n'a pas encore été traité.

  • Exemple 2 : traiter la cible puis ajouter le numéro de séquence

Insérer la description de l'image ici

Vous pouvez voir que notre sexe a été trié, et nous avons également utilisé le numéro de série comme champ de classement (cette méthode est relativement simple, il y en a des plus avancées ci-dessous)

2. Augmentez le numéro de série selon le sexe et attachez-les selon le même sexe
select c.* ,ifnull((
select count(*) from 
(select * from user order by sex ) as b
where c.sex > b.sex
),0)+1 as rownum from
(select * from user order by sex ) as c

L'effet est le suivant :
Insérer la description de l'image ici
Si vous souhaitez classer les plus petits en dernier et les plus grands en premier, remplacez-le par moins de

L'effet est le suivant :

Insérer la description de l'image ici

3. Utiliser des collections pour recevoir ces données à traiter
    public static void main(String[] args) {
    
    
        // BigDecimal类型
        ArrayList<User> list = new ArrayList<>();
        list.add(new User(1,"myqxin","1234",11,null,null));
        list.add(new User(2,"zfwy","4353",12,null,null));
        list.add(new User(3,"qyls","6145",17,null,null));
        list.add(new User(4,"ly","2342",12,null,null));
        list.add(new User(5,"bl","2532",13,null,null));
        List<User> users = mergerList(list);
        for (User user : users) {
    
    
            System.err.println(user);
        }
    }

    public static List<User> mergerList(List<User> list){
    
    
        //list降序排序
        List<User> collect = list.stream().sorted(Comparator.comparing(User::getSex)).collect(Collectors.toList());
        //翻转list
        Collections.reverse(collect);
        Integer index=1;
        Integer maxScore=0;
        for (int i = 0; i < list.size(); i++) {
    
    
            if (i==0){
    
    
                collect.get(i).setRanking(index);
                maxScore=collect.get(i).getSex();
            }else if (Objects.equals(collect.get(i).getSex(),maxScore)){
    
    
                collect.get(i).setRanking(index);
            }else {
    
    
                index++;
                collect.get(i).setRanking(index);
                maxScore=collect.get(i).getSex();
            }

        }
        return collect;
    }

L'effet est le suivant :

Insérer la description de l'image ici
Par rapport au classement ci-dessus, celui-ci est un espace réservé. Si ces choses sont rangées dans l’ordre, il n’y aura pas le même espace réservé.

4. Classez une certaine valeur d'attribut d'un objet et liez les objets avec la même valeur.
     public static List<ExcellentRanking> mergerList(List<ExcellentRanking> list) {
    
    
        if (list.size() < 1) {
    
    
            return new ArrayList<ExcellentRanking>();
        }
        ArrayList<ExcellentRanking> restwo = new ArrayList<>();
        // 对需要排名的值做了处理
        for (ExcellentRanking airQualityRankingResp : list) {
    
    
            if (airQualityRankingResp.getValue() == null) {
    
    
                airQualityRankingResp.setValue(0.0);
                restwo.add(airQualityRankingResp);
            } else {
    
    
                restwo.add(airQualityRankingResp);
            }
        }
        //list降序排序
        List<ExcellentRanking> collect = restwo.stream().sorted(Comparator.comparing(ExcellentRanking::getValue)).collect(Collectors.toList());
        //翻转list
        Collections.reverse(collect);
        for (ExcellentRanking airQualityRankingResp : restwo) {
    
    
            int index = 1;
            for (ExcellentRanking airQualityRankingResp1 : collect) {
    
    
                // > 值越小排名越靠前  < 值越大排名越靠前
                if (airQualityRankingResp.getValue() < airQualityRankingResp1.getValue()) {
    
    
                    index++;
                }
            }
            airQualityRankingResp.setRanking(index);
        }
        return restwo;
    }

Effet:
Insérer la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_45752401/article/details/123678977
conseillé
Classement