我有一个 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;
*SQLFiddle 没有响应,因此 SQL Server 等效
输出:
╔═════════╦═══════╗
║ column1 ║ total ║
╠═════════╬═══════╣
║ 14 ║ 1 ║
║ 12 ║ 1 ║
╚═════════╩═══════╝
它是如何工作的:
- 条件
true
为1,false
为0 SUM
每组(第 1 列)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/