sql 查询排名

首先留电记录表有 user_id (用户 id),customer_id (客户 id),mobile (手机号). 一个客户可能在一个用户名下填写多次电话,现在的需求是给一个 user_id 查出去重后 (根据用户 id, 客户 id) 的名次 (根据去重后客户量的多少). 实在想不起来了,脑壳朦朦的.

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5
秦晓武

一周了,朦完后是不是把问题再梳理下???

3年前 评论

没看明白 要表达什么

3年前 评论

用户就是软件的使用者,客户就是用户通过各种方式得到的人. 问题描述的不是很清楚,简单来说就是 根据客户留电量对用户进行排名,客户可以在一个用户名下进行多次留电,这个需要去重.下面是我写的贼low的代码

SELECT
    b.*,
    @rownum := @rownum + 1 as rownum
    FROM ( SELECT @rownum := 0) r,
    (
        SELECT
        count('*') AS num,
        $unionParam
        FROM
        (
             SELECT DISTINCT
                  mobile,
                  $param
              FROM
                  `crml_visitor_detailed` as e
              WHERE 
                   $where and e.type=3
         ) a    
         LEFT JOIN 
            `$unionTable` `u` ON `u`.`id`=`a`.`$param`    
          WHERE  $wheres   

          GROUP BY
                $param
          ORDER BY
                num DESC
     ) b    

再写一个无关的语句,记录一下.团队的人数.其实完全没必要,前辈建表的时候没有总人数这个字段

SELECT 
    t.id,t.name, t.nature, 
    IFNULL(t1.count1, 0) AS dcount 
FROM
     crm_team t
LEFT JOIN 
(
    SELECT 
        team_id,COUNT(*) AS count1 
    FROM 
        crm_user      
    GROUP BY 
        team_id
) u
ON t.id=u.team_id 
WHERE 
    $where
ORDER BY 
    t.id
LIMIT     
    $page,10
3年前 评论
SELECT
    temp.user_id,
    temp.customer_count,
    temp.rank 
FROM
    (
    SELECT
        a.*,
        @rank :=
    IF
        ( @prev = customer_count, @rank, @inc ) AS rank,
        @inc := @inc + 1,
        @prev := customer_count 
    FROM
        ( SELECT user_id, COUNT( DISTINCT customer_id ) AS customer_count FROM test_uc GROUP BY user_id ) a,(
        SELECT
            @rank := 0,
            @prev := NULL,
            @inc := 1 
        ) b 
    ORDER BY
    customer_count DESC 
    ) temp
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!