社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

如何在Mysql中使用count?

Jon Rodrigo • 3 年前 • 1198 次点击  

我有两张桌子 用户 打电话 如下所示:

用户

id_用户(pk) 通用域名格式
1004 700
1005 700
1006 700
1010 701
1011 701
1012 701
1013 701
1014 800
1015 800
1016 800
1017 800

打电话

id_用户(fk) 地位
1004 阿班
1004 阿班
1004 德斯
1004 允许
1004 德斯
1004 阿班
1011 允许
1011 允许
1011 阿班
1015 阿班
1015 德斯
1015 允许
1015 允许

对于 地位 我有专栏 5种类型(ABAN、DES、LET、NOANS、OTH) . 我想得到下面这样的结果( 按状态按用户获取计数 ):

id_用户 阿班 德斯 允许 诺恩斯 其他
1004 3. 2. 1. 0 0
1005 0 0 0 0 0
1006 0 0 0 0 0
1010 0 0 0 0 0
1011 1. 0 2. 0 0
1012 0 0 0 0 0
1013 0 0 0 0 0
1014 0 0 0 0 0
1015 1. 1. 2. 0 0
1016 0 0 0 0 0
1017 0 0 0 0 0

我不知道该怎么开始查询,请问有什么建议吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130294
 
1198 次点击  
文章 [ 2 ]  |  最新文章 3 年前
sajjad rezaei
Reply   •   1 楼
sajjad rezaei    3 年前

如果你的状态一直是静态的,那5个案例。你可以用 left join group by 以及一些开关情况下的条件来解决查询。

SELECT Users.id_user ,
SUM(CASE WHEN Get_cal.status = 'ABAN' THEN 1 ELSE 0 END) AS ABAN ,
SUM(CASE WHEN Get_cal.status = 'DES' THEN 1 ELSE 0 END) AS DES ,
SUM(CASE WHEN Get_cal.status = 'LET' THEN 1 ELSE 0 END) AS LET ,
SUM(CASE WHEN Get_cal.status = 'NOANS' THEN 1 ELSE 0 END) AS NOANS ,
SUM(CASE WHEN Get_cal.status = 'OTH' THEN 1 ELSE 0 END) AS OTH 
FROM Users LEFT JOIN Get_cal ON (Users.id_user = Get_cal.id_user) GROUP BY Users.id_user ,Get_cal.id_user
Tim Biegeleisen
Reply   •   2 楼
Tim Biegeleisen    3 年前

您需要在此处进行条件聚合:

SELECT
    u.id_user,
    COUNT(CASE WHEN c.status = 'ABAN'  THEN 1 END) AS ABAN,
    COUNT(CASE WHEN c.status = 'DES'   THEN 1 END) AS DES,
    COUNT(CASE WHEN c.status = 'LET'   THEN 1 END) AS LET,
    COUNT(CASE WHEN c.status = 'NOANS' THEN 1 END) AS NOANS,
    COUNT(CASE WHEN c.status NOT IN ('ABAN', 'DES', 'LET', 'NOAN')
               THEN 1 END) AS OTH
FROM Users u
LEFT JOIN Get_cal c
    ON c.id_user = u.id_user
GROUP BY
    u.id_user
ORDER BY
    u.id_user;