我写了一个下面提到的查询,我需要在GUI中准备一个列表,在其中需要显示总记录的数量,现在我的记录是119,这是正确的,但是当我应用count函数时,它变成了115。为什么会这样。
SELECT distinct E.EMP_CODE,
a.EMP_ID,
e.name,
E.ADHAR_NO,
a.CURRENT_STATUS,
D.NAME
FROM ACR a
JOIN EMPLOYEE E
ON E.EMP_ID=a.EMP_ID
JOIN DESIGNATION D
ON D.DESIGNATION_ID =E.DESIGNATION_ID
AND e.EMP_TYPE_ID NOT IN(02,03,04,06,08)
AND (e.DESIGNATION_ID IN (23,99)
OR d.DESIGNATION_CLASS IN(1,2))
AND (e.relief_type IS NULL
OR e.RELIEF_TYPE = 4)
JOIN REGION R
ON R.REGION_ID=E.REGION_ID
LEFT JOIN CIRCLE C
ON C.CIRCLE_ID =E.CIRCLE_ID
WHERE ACR_FOR_SESSION='2017-2018'
AND E.CIRCLE_ID IS NULL
AND E.REGION_ID =1
AND a.CURRENT_STATUS>1
总记录列表为119
现在在对DISTINCT E.EMP_CODE
进行计数之后
SELECT count(distinct E.EMP_CODE)
FROM ACR a
JOIN EMPLOYEE E
ON E.EMP_ID=a.EMP_ID
JOIN DESIGNATION D
ON D.DESIGNATION_ID =E.DESIGNATION_ID
AND e.EMP_TYPE_ID NOT IN(02,03,04,06,08)
AND (e.DESIGNATION_ID IN (23,99)
OR d.DESIGNATION_CLASS IN(1,2))
AND (e.relief_type IS NULL
OR e.RELIEF_TYPE = 4)
JOIN REGION R
ON R.REGION_ID=E.REGION_ID
LEFT JOIN CIRCLE C
ON C.CIRCLE_ID =E.CIRCLE_ID
WHERE ACR_FOR_SESSION='2017-2018'
AND E.CIRCLE_ID IS NULL
AND E.REGION_ID =1
AND a.CURRENT_STATUS>1
Output: 115 (Wrong)
我想念什么吗?请给我最好的解决方案
答案 0 :(得分:1)
您可以使用group by,因为在您的第一个查询中分组是不同的,因此在第二个查询中也要应用
select sum(cnt) from
(
SELECT count(E.EMP_CODE) as cnt
FROM ACR a
JOIN EMPLOYEE E
ON E.EMP_ID=a.EMP_ID
JOIN DESIGNATION D
ON D.DESIGNATION_ID =E.DESIGNATION_ID
AND e.EMP_TYPE_ID NOT IN(02,03,04,06,08)
AND (e.DESIGNATION_ID IN (23,99)
OR d.DESIGNATION_CLASS IN(1,2))
AND (e.relief_type IS NULL
OR e.RELIEF_TYPE = 4)
JOIN REGION R
ON R.REGION_ID=E.REGION_ID
LEFT JOIN CIRCLE C
ON C.CIRCLE_ID =E.CIRCLE_ID
WHERE ACR_FOR_SESSION='2017-2018'
AND E.CIRCLE_ID IS NULL
AND E.REGION_ID =1
AND a.CURRENT_STATUS>1
group by
a.EMP_ID,
e.name,
E.ADHAR_NO,
a.CURRENT_STATUS,
D.NAME
) t
答案 1 :(得分:1)
第一个查询列出的所有选定列中不同的行。第二个查询在单个列E.EMP_CODE
中计算不同的值。
E.EMP_CODE A.EMP_ID ...
1 2 ...
1 3 ...
第一个查询有两个不同的行,而E.EMP_CODE
则只有一个不同的count
。
答案 2 :(得分:1)
因为E.EMP_CODE
中有一些行E.EMP_CODE
相同。当您使用count(distinct E.EMP_CODE)
时,仅从E.EMP_CODE
中删除相同的值,然后获得COUNT
的数字
但是当您使用
distinct E.EMP_CODE,
a.EMP_ID,
e.name,
E.ADHAR_NO,
a.CURRENT_STATUS,
D.NAME
将删除所有相同的值。
这是一个样本。
CREATE TABLE T(col1 varchar(50),col2 varchar(50));
INSERT INTO T VALUES ('A','B');
INSERT INTO T VALUES ('A','B1');
INSERT INTO T VALUES ('AB','B3');
查询1 :
SELECT DISTINCT *
FROM T
Results :
| COL1 | COL2 |
|------|------|
| A | B1 |
| A | B |
| AB | B3 |
查询2 :
SELECT COUNT(DISTINCT col1)
FROM T
Results :
| COUNT(DISTINCTCOL1) |
|---------------------|
| 2 |
答案 3 :(得分:0)
是否可能有一些重复的e.emp_code值..例如:emp_code的行数更多
请尽量避免与众不同
SELECT count(E.EMP_CODE)
FROM ACR a
JOIN EMPLOYEE E
ON E.EMP_ID=a.EMP_ID
JOIN DESIGNATION D
ON D.DESIGNATION_ID =E.DESIGNATION_ID
AND e.EMP_TYPE_ID NOT IN(02,03,04,06,08)
AND (e.DESIGNATION_ID IN (23,99)
OR d.DESIGNATION_CLASS IN(1,2))
AND (e.relief_type IS NULL
OR e.RELIEF_TYPE = 4)
JOIN REGION R
ON R.REGION_ID=E.REGION_ID
LEFT JOIN CIRCLE C
ON C.CIRCLE_ID =E.CIRCLE_ID
WHERE ACR_FOR_SESSION='2017-2018'
AND E.CIRCLE_ID IS NULL
AND E.REGION_ID =1
AND a.CURRENT_STATUS>1
distint count仅返回列中的differnet值的数量