mysql - 一条sql语句 获取下列需求。
ringa_lee
ringa_lee 2017-04-17 13:08:50
[MySQL讨论组]

表结构如下

其中 recomm_phone 可为空 若不为空 其值来源自phone字段(自身或者其它条数据的phone字段)
我们要取得数据是name recomm_phone num(该phonerecomm_phone中出现的次数)

ringa_lee
ringa_lee

ringa_lee

全部回复(2)
巴扎黑

@stoneworld 不知道你哪个性能如何,估计数据量大的时候有点慢。


SQL Fiddle

MySQL 5.6 Schema Setup:

CREATE TABLE `reg` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `phone` varchar(11) NOT NULL,
  `recomm_phone` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
;

insert into `reg`
( name, phone, recomm_phone)
values
( 'james', '12345678901', null ),
( 'fancy', '12345678901', '12345678901'),
( 'jessy', '97969808707', '12345678901'),
( 'jack', '91724917324', null),
( 'luke', '19247123472', '91724917324')
;

Query 1:

select  name,
        phone,
        a.recomm_phone,
        ifnull(b.num, 0) as num
from    reg a
    left join (
        select  recomm_phone,
                count(recomm_phone) as num
        from    reg
        where   recomm_phone is not null
        group
            by  recomm_phone
    ) b on a.phone = b.recomm_phone
order
    by  name

Results:

name phone recomm_phone num
fancy 12345678901 12345678901 2
jack 91724917324 (null) 1
james 12345678901 (null) 2
jessy 97969808707 12345678901 0
luke 19247123472 91724917324 0
高洛峰

可能我问的问题没有问清楚的原因,木有人回答,我发现我问问题都是自问自答了,奉上

SELECT name,phone,recomm_phone,(SELECT COUNT(*) FROM reg WHERE recomm_phone=o.phone) 
as num FROM reg AS o 
SELECT COUNT( recomm_phone) AS num, recomm_phone FROM reg
GROUP BY recomm_phone ORDER BY num DESC
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号