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

MYSQL query to sum upp all values from a certain fields

我有一个 table 列:

db_nameverb

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

我现在使用的查询是:

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

哪个 returns:

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

类似于:

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

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

你好像在说MSSQL?这取决于 SQL 您使用的服务器版本,但一种方法是使用 PIVOTS。

在 SQL 服务器中旋转:https://www.c-sharpcorner.com/UploadFile/f0b2ed/pivot-and-unpovit-in-sql-server/

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

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

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

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 表示假。这样可以很容易地总结这些值。