我有桌子

cab name value
1 PHP 1
1 PHP 2
1 PHP 0
2 LHL 0
3 GHG 3
3 GHG 2

我期待得到不同的出租车和名称加上多少值=0和多少是0 结果表应如下所示:

cab name value=0 value>0
1 PHP 1 2
2 LHL 1 0
3 GHG 0 2

第三列表示有多少个值=0 第四列表示值0

我已经试了一整天,但我似乎不能找出正确的SQL语句,

推荐答案

这里不需要子查询或DISTINCT,这是conditional aggregation的用例.

我们将简单地使用GROUP BY并将值= 0和值0的占用求和.

如果列value不可为空,则如下所示:

SELECT 
  cab,
  name,
  SUM(value = 0) AS "value=0",
  SUM(value > 0) AS "value>0"
FROM yourtable
GROUP BY 
  cab, name
ORDER BY 
  cab;

如果列为空,则上述查询可以返回NULL.如果不是故意的,我们可以在总和周围使用COALESCE来强制执行结果0:

SELECT 
  cab,
  name,
  COALESCE(SUM(value = 0),0) AS "value=0",
  COALESCE(SUM(value > 0),0) AS "value>0"
FROM yourtable
GROUP BY 
  cab, name
ORDER BY 
  cab 

试用here

注意:我更喜欢双引号表示别名,因为这是标准SQL.如果因为任何原因必须禁用ANSI_QUOTE,你更需要反勾.

Mysql相关问答推荐

在MySQL中存储一条帖子的点赞数量

布尔值之间的 SQL less/greater 比较会产生意外结果

查询优化并提高性能

对匹配两个或多个表的表结果进行排序

MySQL - 密码哈希没有预期的格式

获取每个参数的记录,不重复

如果存在N个特殊行,如何 Select 它们,其余的必须填充常规行,总行数不能超过MySQL中的X行?

Group By 查询运行速度太慢而无法正常运行

如何根据 R 中的价格范围将数据从一列复制到新列?

MySql部分匹配基于部分查询代码

查询给出错误时的 mySQL Group_Concat 和 Case

更改整数时间到日期格式 MM/DD/YY,如 python 中的 datetime.fromtimestamp

不正确的整数(2147483647)被插入到 MySQL 中?

如何改进 INSERT INTO ... SELECT 锁定行为

在 MySQL 中存储 IPv6 地址

mysql错误'TYPE = MyISAM'

在 MySQL Workbench 中导出超过 1000 条记录的查询结果

在 PHP 中运行 MySQL *.sql 文件

MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询

SELECT INTO 和未声明的变量错误