MYSQL 查询汇总特定字段中的所有值

时间:2021-03-25 09:00:48

标签: mysql sql pivot crosstab

我有一个带列的表格:

db_nameverb

该表保存着某个数据库可能的所有请求的使用数据。

我现在使用的查询是:

SELECT db_name, verb, COUNT(*) FROM request GROUP BY db_name, verb order by db_name

哪个返回:

enter image description here

但我想要的是,查询返回所有不同的 db_name 并汇总所有不同的动词。

类似于:

db_name      GET    POST   DELETE   UPDATE
username0     99      89      100     8299
username1     19      33      120     3111

我应该怎么做,或者我应该在哪里看?

3 个答案:

答案 0 :(得分:1)

MySQL 有一个方便的条件计数语法:

SELECT db_name, 
       SUM(verb = 'GET') as cnt_get,
       SUM(verb = 'POST') as cnt_post,
       SUM(verb = 'DELETE') as `cnt_delete,
       SUM(verb = 'UPDATE') as `cnt_update
FROM request
GROUP BY db_name
ORDER BY db_name;

具体来说,MySQL 将布尔值视为算术上下文中的数字,1 表示真,0 表示假。这使得总结这些值变得容易。

答案 1 :(得分:0)

您好像在谈论 MSSQL?这取决于您使用的 SQL Server 版本,但一种方法可能是使用 PIVOTS。

在 SQL Server 中透视:https://www.c-sharpcorner.com/UploadFile/f0b2ed/pivot-and-unpovit-in-sql-server/

[编辑] 所以它的MYSQL。在这种情况下,我会建议 Kazi 的回答

答案 2 :(得分:0)

如果你只有四个动词,那么你可以使用以下查询:

select db_name ,sum(case when verb='GET' then 1 else 0 end)    [GET],
                sum(case when verb='POST' then 1 else 0 end)   [POST],
                sum(case when verb='DELETE' then 1 else 0 end) [DELETE],
                sum(case when verb='UPDATE' then 1 else 0 end) [UPDATE]
from request 
group by db_name
相关问题