我有一个包含3个相关列的mysql表。
column1 column2 column3
12 NULL 13
12 stuff 14
13 stuff2 15
13 NULL 14
14 stuff2 15
14 NULL 16
我想运行一个sql查询,它给出了按column1分组的行数,其中column2为null而column3不是14.所以查询应返回类似这样的内容 -
14 1
12 1
它不会返回column1为13的任何行,因为对于column1为13的行,column3为14。
注意:我不想为此使用视图。
答案 0 :(得分:3)
使用条件聚合:
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 ║
╚═════════╩═══════╝
工作原理:
true
为1,false
为0 SUM
(第1列) HAVING total > 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 ║ ╚═════════╩═════════╩═════════╩═════════════╝
它可以更简单(如果你想要消除0的组),只需:
SELECT column1, COUNT(*) AS total
FROM table_name
WHERE column2 IS NULL
AND column3 <> 14
GROUP BY column1
还有一件事:
column3不是14
如果column3可以为空,则可能需要使用:
WHERE column2 IS NULL
AND (column3 <> 14 OR column3 IS NULL)