我有一个带列的表格:
db_name
和 verb
该表保存着某个数据库可能的所有请求的使用数据。
我现在使用的查询是:
SELECT db_name, verb, COUNT(*) FROM request GROUP BY db_name, verb order by db_name
哪个返回:
但我想要的是,查询返回所有不同的 db_name 并汇总所有不同的动词。
类似于:
db_name GET POST DELETE UPDATE
username0 99 89 100 8299
username1 19 33 120 3111
我应该怎么做,或者我应该在哪里看?
答案 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