首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用mysql group by显示计数为0的行

在MySQL中,如果你想要在使用GROUP BY时显示计数为0的行,你可能需要使用LEFT JOIN或者创建一个虚拟表来实现这个功能。

以下是一个例子:

代码语言:javascript
复制
SELECT a.category, COUNT(b.id) as count
FROM (SELECT DISTINCT category FROM table_name) a
LEFT JOIN table_name b ON a.category = b.category
GROUP BY a.category;

在这个例子中,我们首先创建了一个包含所有不重复类别的虚拟表a。然后,我们使用LEFT JOIN将这个虚拟表和原始表连接起来,基于类别进行连接。最后,我们使用GROUP BY和COUNT函数来计算每个类别的计数。

这将会返回一个结果集,其中包含了所有的类别,即使某个类别的计数为0,也会在结果集中显示。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【重学 MySQL】三十八、group by使用

    【重学 MySQL】三十八、group by使用 GROUP BY 是 SQL 中一个非常重要子句,它通常与聚合函数(如 COUNT(), MAX(), MIN(), SUM...示例 2: 计算每个部门平均工资 SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department; 这会显示每个部门平均工资...WITH ROLLUP MySQLGROUP BY ... WITH ROLLUP是一个强大功能,它允许你执行聚合查询,并在结果集末尾自动添加更高级别的汇总行。...这些汇总行是通过对前面分组结果进行进一步聚合得到,从而提供了一种方便方式来查看数据不同层次总计。 基本用法 当你使用GROUP BY ......WITH ROLLUP时,MySQL会生成一个包含所有指定列分组结果集,并在结果集末尾添加一个或多个汇总行。这些汇总行按照你在GROUP BY子句中指定顺序进行汇总。

    13710

    MySQL中 concat() 以及 group_concat() 使用

    语法:concat(str1, str2,...)返回结果连接参数产生字符串,如果有任何一个参数null,则返回值null。准备:我们新建一个my_test表,并插入测试数据......返回结果连接参数产生字符串,如果有任何一个参数null,则返回值null。 准备:我们新建一个my_test表,并插入测试数据: SELECT * FROM `my_test`; ?...需要注意是分隔符不能为null,如果null,则返回结果null。...三、group_concat()函数 前言:在有group by查询语句中,select指定字段要么就包含在group by语句后面,作为分组依据,要么就包含在聚合函数中。...——使用group_concat() 例6:查询数据分组并获取每个组别中详细数据: select sex, group_concat(id) as ids, group_concat(username

    2.6K30

    MySQL高版本使用group by报错解决办法

    如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表查询引用在GROUP BY子句中既未命名非集合列,也不在功能上依赖于它们...mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by 看一下ONLY_FULL_GROUP_BY意思是:对于GROUP...BY聚合操作,如果在SELECT中列,没有在GROUP BY中出现,那么这个SQL是不合法,因为列不在GROUP BY从句中,也就是说查出来列必须在group by后面出现否则就会报错,或者这个字段出现在聚合函数里面...先进入MySQL客户端执行命令 select @@GLOBAL.sql_mode; 看到上面返回命令行第一段---> ONLY_FULL_GROUP_BY; 网上给出解决方法有大概三种...,一种是在程序代码语句里,给查询条件列增加聚合函数,如果你这样做,那么就很麻烦了,而且以在开发过程中使用group by语句都要下功夫,这个方法就算了。

    1.3K20

    MySQL分割一多行思路

    自己手动拼 SQL 太蛋疼,而且好几万几十万用户,拼成SQL,复制粘贴也够蛋疼。那么可以考虑将这一分割多行,作为一个字段。...mysql.help_topic 是啥 网上思路是利用 mysql.help_topic 这个记录表,这个表是存储 mysql 各种帮助文档目录,主要因为他有一个从零开始自增 id 字段,所以采用这张表作为帮助表...我们可以创建一个表,里面只有一列 id,从0或者1开始,这里我们从0开始,一直到你,可能最多个数,我们这里是 200 万。...+----+ | id | +----+ | 0 | | 1 | | 2 | | 3 | | 4 | | 5 | 这样,通过 join 这张表,用 id < ,个数条件,就能得出上面的processed_data...help 表就是里面只有一列 id,从0或者1开始,这里我们从0开始,一直到你,可能最多个数这张表

    3.1K20

    mysql8.0+版本在使用group by 出现问题

    起因: 由于想使用MySQL8中函数,手动将项目中数据库从5.7升级到了8.0.20 社区版本,但是升级完之后部分查询报错了,错误信息如下 which is not functionally dependent...on columns in GROUP BY clause; this is incompatible withsql_mode=only_full_group_by 去搜了一下,推荐几篇都说是需要修改配置文件...,按照文章提示操作了,结果重启就报错,仔细比对了才发现文章里配置项加了单引号,而且还有多余空格,简直是害人。...解决: 在客户端或者服务器连上MySQL后输入SELECT @@sql_mode;,得到结果集如下: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE...,在[mysqld]下添加一 sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO

    28000

    浅析MySQL中concat及group_concat使用

    3、举例: 例1: select concat (id, name, score) as info from tt2; 中间有一null是因为tt2表中有一score值null。...有没有更直观方法,既让每个名字都只出现一次,又能够显示所有的名字相同的人id呢?...——使用group_concat() 1、功能:将group by产生同一个分组中值连接起来,返回一个字符串结果。...;如果希望对结果中值进行排序,可以使用order by子句;separator是一个字符串值,缺省一个逗号。...3、举例: 例7:使用group_concat()和group by显示相同名字的人id号: 例8:将上面的id号从大到小排序,且用’_’作为分隔符: 例9:上面的查询中显示了以name分组每组中所有的

    5.6K40

    mysql5.7在使用group by注意事项

    mysql5.7在使用group by注意事项 1、问题描述 2、解决方案(一): 3、解决方案(二) 4、解决方案(三) 1、云数据库修改方案: 2、本地数据库修改方案: 1、问题描述 先看一个sql...语句报错: select * from oilDaily group by wellId 这是因为在mysql5.7中开启了sql_mode中“only_full_group_by”,而这个在执行以往版本中带有...group by语句时就会报错。...(二) 在不需要group by属性上面使用any_value()函数 例如: select any_value(oilId),wellId from oilDaily group by wellId...4、解决方案(三) 我们直接删除sql_mode中only_full_group_by 我用mysql云数据库,修改方式如下: 1、云数据库修改方案: 点击管理 点击参数设置

    60820

    MySQL使用group by出现1055错误解决办法

    注:由于执行sql进行修改方法在重启mysql后会失效,所以本文仅介绍通过修改配置文件从而永久解决该问题办法 在MYSQL中通过GROUP BY查询数据时报错如下 [Err] 1055 - Expression...,因为列不在GROUP BY从句中 因为有only_full_group_by,所以我们要在MySQL中正确使用group by语句的话,只能是select column1(只能是一个字段) from...中my.cnf(Linux中my.cnf,Windows中my.ini) [root@VM_0_14_centos bin]# vi /etc/my.cnf 在[mysqld]标签中加入: sql_mode...[root@VM_0_14_centos mysql]# service mysqld restart 在Navicat中重新查询: select @@sql_mode; 结果如下: STRICT_TRANS_TABLES...了,此时group by使用正常了,如下 大功告成!

    58510

    MySQL中主键0和主键自排约束关系

    开始不设置主键 表设计如下: 如果id位置有好几个0的话:设置主键并且自动排序时,0会从1开始递增; Insert 进去 id = 0数据,数据会从实际行数开始增加,和从0变化不一样;...使用limit查看指定范围数据时候这时候表就会是从0开始往下排顺序,但是insert添加一数据时候反而是跟行数有关系,这时候又是按照从1开始往下排顺序。...如果使用主键自排约束以前表里有0,再设置完主键自排以后所有的0又不会根据行数,而是直接按照自上而下顺序从1开始排。...如果把表中某个主键数改成0,那直接就会进行排序放到正数前面,也就是说主键自排是允许有0存在,那为什么本身存在0要去修改成从1开始递增序列呢?...开始没0,增加主键自排约束,新添加主键是0行会根据行数自行变化,注意这里是新添加使用是insert。   开始没0,把某个主键数修改成0,这个0会直接在排好序了再在表里显示出来。

    4.3K30

    MySQL使用group_concat遇到问题及解决

    使用group_concat过程中遇到个问题,这里记录一下:在MySQL中有个配置参数group_concat_max_len,它会限制使用group_concat返回最大字符串长度,默认是1024...查询group_concat_max_len大小: show variables like 'group_concat_max_len'; 修改group_concat_max_len大小: 方法一:...SET GLOBAL group_concat_max_len = 1024 * 10; SET SESSION group_concat_max_len = 1024 * 10; 这种方法可以在不重启服务器情况下使用...可以通过修改MySQL(my.ini)配置文件来彻底解决这个问题。 方法二: 修改MySQL(my.ini)配置文件,需要重启服务器后才能生效。...找到my.ini文件,如果修改或新增: group_concat_max_len = 10240 重启生效。

    1.9K20

    MySQL 最经常使用一千

    unsigned 属性改动 - 显示宽度,假设某个数不够定义字段时设置位数,则前面以0补填,zerofill 属性改动 例:int(5) 插入一个数'123'。...补填后为'00123' - 在满足要求情况下,越小越好。 - 1表示bool值真,0表示bool值假。MySQL没有布尔类型,通过整型0和1表示。经常使用tinyint(1)表示布尔型。...M和D大小会决定浮点数范围。不同于整型固定范围。 M既表示总位数(不包括小数点和正负号),也表示显示宽度(全部显示符号均包括)。 支持科学计数法表示。...能够用视图仅仅显示姓名,地址,而不显示社会保险号和工资数等,还有一原因是可使复杂查询易于理解和使用。...这样要求select语句仅仅能返回一,可是能够是多个字段,就意味着同一时候多个变量进行赋值,变量数量须要与查询列数一致。还能够把赋值语句看作一个表达式,通过select运行完毕。

    1.4K10

    Phoenix填坑记4:整10倍数数值会被显示成科学计数

    phoenix写法对数据类型限制比较严格,对于字符串类型,需要使用to_number将字符串转换成数字,但是在使用过程中,发现一个很奇怪现象,那就是以整10倍数数据,比如说100,就会被显示成科学计数法...首先,我表在设计时候,采用字符串来保存ID,但是另外一个表是采用BIGINT类型存储,所有需要对该字段进行转换,转成数组,写法:to_number(TRIM(f_test),'###0')。...),to_number('100','##########E0') from dwb.t_test where f_test4 = 3000700 在使用过程中,发现以整10倍数数据,比如说...100,就会被显示成科学计数法。...后来才发现,这是Phoenix一个bug,跟sql写法无关,在正常使用中,并无发现异常情况,如果大家发现无法正常显示,可以使用to_char将数据转成字符串再显示出来就行。

    72020

    Debezium基本使用(以MySQL例)

    Debezium介绍 基本使用 MySQL准备工作 编写程序 测试 总结 ---- 一、Debezium介绍 摘自官网: Debezium is a set of distributed services...简单理解就是Debezium可以捕获数据库中所有数据变化并包装成事件流顺序输出。 二、基本使用 下面以MySQL例介绍Debezium基本使用。 1...."snapshot.mode", "initial");//全量+增量 // 使用上述配置创建Debezium引擎,输出样式Json字符串格式 engine = DebeziumEngine.create...三、总结 本文以MySQL例介绍了Debezium在代码中基本使用流程,对MySQL数据进行常见增删改操作,Debezium将捕获这些数据变化,并记录了数据变化前后数据,并对外提供事件流,...business=space_collection&business_id=343928 ---- 文章推荐: my2sql工具之快速入门 相同执行计划,为何有执行快慢差别 使用JMeter进行MySQL

    2.8K11

    MySQL5.7中使用GROUP_CONCAT数据被截断问题

    前天在生产环境中遇到一个问题:使用GROUP_CONCAT函数select出来数据被截断了,最长长度不超过1024字节,开始还以为是navicat客户端自身对字段长度做了限制问题。...然后想到1024这个熟悉数字,会不会是C++框架在接收MySQL通过socket传输过来数据时被处理了呢?于是手工在日志中打印这个字段,发现即使数据长度超过1024字节仍然是可以完整显示。...2 解决问题 只要调整group_concat_max_len到最大值就行了,官方在MySQL5.7手册中给出了如下定义: 由于BZ测试虚拟机MySQL5.7.19是64位,所以可以通过下面这两种方法配置好...group_concat_max_len最大值18446744073709551615: #### 方法一:修改MySQL配置文件my.cnf,在[mysqld]节点中添加 group_concat_max_len...; 3 测试效果 这里采用是第二种方法,通过执行SELECT LENGTH(GROUP_CONCAT(Fremark)) FROM account;结果对比,可以发现已经成功解决了MySQL5.7中使用

    45210

    MySQL中无GROUP BY情况下直接使用HAVING语句问题探究

    这篇文章主要介绍了MySQL中无GROUP BY情况下直接使用HAVING语句问题探究,同时探究了该情况下MAX与MIN功能使用情况,需要朋友可以参考下: 今天有同学给我反应,有一张表,id是主键...旁白 一般来说,HAVING子句是配合GROUP BY使用,单独使用HAVING本身是不符合规范, 但是MySQL会做一个重写,加上一个GROUP BY NULL,”SELECT * FROM...也就是说,GROUP BY NULL 以后,只会有一个分组,里面就是第一数据。...测试一下GROUP BY a,这样就对了,每个分组内只有一,所以MAX/MIN一样大,这回是取得组内最大和最小值。 ?...GROUP BY NULL时MAX/MIN行为,是这个问题本质,所以啊,尽量使用标准语法,玩花样SQL之前,一定要搞清楚它行为是否与理解一致。

    4.1K41

    MySQL递归查询_函数语法检查_GROUP_CONCAT组合结果集使用

    MySQL可以通过创建函数,来使用上面的流程控制语句,Mysql对函数语法检查也是很苛刻,可以说很烦人,不熟悉的人估计会哭。。。...2-递归查询关键部分:   a-我表结构:   b-我递归脚本:   用于查询:当前类目ID及所有的父级元素ID使用逗号分割开一个字符串:   下面脚本里使用了组合结果集一个函数:GROUP_CONCAT...DO     SELECT GROUP_CONCAT(ParentID) INTO pid FROM product_leimu WHERE ID = pid;     IF pid>0 THEN       ...:将结果集链接在一起,使用逗号分隔,group_concat([DISTINCT] 要连接字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])   备注: 这个函数可以在找不到数据情况下...GROUP_CONCAT(ParentID) INTO pid FROM product_leimu WHERE 1=2; -- 找不到数据情况下,通过函数GROUP_CONCAT组合之后,可以继续使用

    2.5K30
    领券