mysql group by 删除一些列后

标签 mysql sql

我有一个 mysql 表,其中包含 3 个相关列。

column1    column2   column3    
  12          NULL      13      
  12          stuff     14      
  13          stuff2    15      
  13          NULL      14      
  14          stuff2    15      
  14          NULL      16

我想运行一个sql查询,它给出按column1分组的行数,其中column2为空,column3不为14。所以查询应该返回类似这样的内容 -

14 1
12 1

它不会返回column1为13的任何行,因为对于column1为13的行,column3为14。

注意:我不想为此使用 View 。

最佳答案

使用条件聚合:

SELECT column1, SUM(column2 IS NULL AND column3 <> 14) AS total
FROM table_name
GROUP BY column1
HAVING total > 0;

LiveDemo*

*SQLFiddle 没有响应,因此 SQL Server 等效

输出:

╔═════════╦═══════╗
║ column1 ║ total ║
╠═════════╬═══════╣
║      14 ║     1 ║
║      12 ║     1 ║
╚═════════╩═══════╝

它是如何工作的:

  1. 条件true为1,false为0
  2. SUM 每组(第 1 列)
  3. HAVING 总数 > 0 过滤掉 13

    
    ╔═════════╦═════════╦═════════╦═════════════╗
    ║ column1 ║ column2 ║ column3 ║  condition  ║
    ╠═════════╬═════════╬═════════╬═════════════╣
    ║      12 ║ NULL    ║      13 ║ true        ║
    ║      12 ║ stuff   ║      14 ║ false       ║
    ║      13 ║ stuff2  ║      15 ║ false       ║
    ║      13 ║ NULL    ║      14 ║ false       ║
    ║      14 ║ stuff2  ║      15 ║ true        ║
    ║      14 ║ NULL    ║      16 ║ false       ║
    ╚═════════╩═════════╩═════════╩═════════════╝
    

It can be even simpler (if you want to eliminate groups with 0 of course), just:

SELECT column1, COUNT(*) AS total
FROM table_name
WHERE column2 IS NULL 
  AND column3 <> 14
GROUP BY column1

还有一件事:

column3 is not 14

如果column3可为空,您可能需要使用:

 WHERE column2 IS NULL 
   AND (column3 <> 14 OR column3 IS NULL)

关于mysql group by 删除一些列后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851226/

相关文章:

MySQL 计算从 1 到 0 的连续值的个数

mysql - 如何从sql表中删除未知行数

sql - 从字符串转换日期时间时转换失败

php - 我的 While 循环没有获取 MySQL 数据库条目

c# - 如何将 SqlDataReader 中的当前数据与下一个数据进行比较

php - 从 PHP 插入 MySQL

mysql - 如何在SQL中计算 "as large as the next #"中的数字?

sql - SQL Server 2012 是否有延迟连接

sql - 具有从属表的存储过程不存在

SQL 查询根据日期和月份检索用户