SQL Count(*)和Group By - 查找行之间的差异

8 sql

下面是我编写的SQL查询,用于查找每个产品ID(proc_id)的总行数:

SELECT proc_id, count(*)
FROM proc
WHERE grouping_primary = 'SLB'
AND   eff_date = '01-JUL-09'
GROUP BY proc_id
ORDER BY proc_id;
Run Code Online (Sandbox Code Playgroud)

下面是上面SQL查询的结果:

proc_id count(*)
01  626
02  624
03  626
04  624
05  622
06  624
07  624
09  624

请注意,proc_id ='01',proc_id ='03'和proc_id ='05'的总计数不同(不等于624行,因为其他proc_id).

如何编写SQL查询以查找proc_id ='01',proc_id ='03'和proc_id ='05'与其他proc_id相比哪些proc_id行不同?

Rem*_*anu 14

首先,您需要定义使'624'正确的标准.这是平均值count(*)吗?是count(*)最经常发生的吗?这是你最喜欢的count(*)吗?

然后,您可以使用HAVING子句来分隔与您的条件不匹配的子句:

SELECT proc_id, count(*)
FROM proc
WHERE grouping_primary = 'SLB'
AND   eff_date = '01-JUL-09'
GROUP BY proc_id
HAVING count(*) <> 624
ORDER BY proc_id;
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT proc_id, count(*)
FROM proc
WHERE grouping_primary = 'SLB'
AND   eff_date = '01-JUL-09'
GROUP BY proc_id
HAVING count(*) <> (
  <insert here a subquery that produces the magic '624'>
 )
ORDER BY proc_id;
Run Code Online (Sandbox Code Playgroud)


Dav*_*d M 2

如果您知道 624 是一个神奇的数字:

SELECT proc_id, count(*)
FROM proc
WHERE grouping_primary = 'SLB'
AND   eff_date = '01-JUL-09'
GROUP BY proc_id
HAVING count(*) <> 624
ORDER BY proc_id;
Run Code Online (Sandbox Code Playgroud)