【问题标题】:MYSQL query to sum upp all values from a certain fieldsMYSQL 查询总结某个字段的所有值
【发布时间】:2021-06-22 01:16:14
【问题描述】:

我有一个带有列的表格:

db_nameverb

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

我现在使用的查询是:

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

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

【问题讨论】:

  • 如果突然插入了一个新的动词,是否会出现在预期的结果中? (或者总是 GET、POST、DELETE 和 UPDATE?)
  • 永远都是那四个动词,没有别的。
  • 数据库是MYSQL

标签: mysql sql pivot crosstab


【解决方案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 为假。这样可以很容易地总结这些值。

【讨论】:

  • 非常感谢,我就是这么想的
【解决方案2】:

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

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

【讨论】:

【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2011-04-17
    • 2013-08-29
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多