phpmyadmin 如何在MySQL中计算透视表上的值?

7nbnzgx9  于 2022-11-23  发布在  PHP
关注(0)|答案(2)|浏览(92)

我有两个表UsersGet_cal,如下所示:

用户

| 用户标识(pk)|精梳|
| - -|- -|
| 千零四|七百|
| 千零五|七百|
| 千零六|七百|
| 小行星|七零一|
| 一○一一|七零一|
| 一○一二|七零一|
| 小行星1013|七零一|
| 一○一四|八百|
| 小行星1015|八百|
| 一○一六|八百|
| 小行星1017|八百|

获取校准

| 用户标识(fk)|状态|
| - -|- -|
| 千零四|放弃|
| 千零四|放弃|
| 千零四|数据交换系统|
| 千零四|左|
| 千零四|数据交换系统|
| 千零四|放弃|
| 一○一一|左|
| 一○一一|左|
| 一○一一|放弃|
| 小行星1015|放弃|
| 小行星1015|数据交换系统|
| 小行星1015|左|
| 小行星1015|左|
对于状态列,我有5种类型(ABAN、DES、LET、NOANS、OTH)。我希望获得如下结果(按状态按用户获取计数):
| id_用户|放弃|数据交换系统|左|噪声|其他|
| - -|- -|- -|- -|- -|- -|
| 千零四|三个|2个|一个|第0页|第0页|
| 千零五|第0页|第0页|第0页|第0页|第0页|
| 千零六|第0页|第0页|第0页|第0页|第0页|
| 小行星|第0页|第0页|第0页|第0页|第0页|
| 一○一一|一个|第0页|2个|第0页|第0页|
| 一○一二|第0页|第0页|第0页|第0页|第0页|
| 小行星1013|第0页|第0页|第0页|第0页|第0页|
| 一○一四|第0页|第0页|第0页|第0页|第0页|
| 小行星1015|一个|一个|2个|第0页|第0页|
| 一○一六|第0页|第0页|第0页|第0页|第0页|
| 小行星1017|第0页|第0页|第0页|第0页|第0页|
我不知道如何开始查询,请有什么建议?

628mspwn

628mspwn1#

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

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;
ycggw6v2

ycggw6v22#

如果您的状态在这5个案例中始终是静态的,则可以使用left joingroup 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

相关问题