MYSQL 查询以汇总特定字段中的所有值
MYSQL query to sum upp all values from a certain fields
我有一个 table 列:
db_name
和 verb
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
表示假。这样可以很容易地总结这些值。
我有一个 table 列:
db_name
和 verb
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
表示假。这样可以很容易地总结这些值。