首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL如何计算列中的唯一值,每人每天只计算一次。

SQL如何计算列中的唯一值,每人每天只计算一次。
EN

Stack Overflow用户
提问于 2017-10-30 21:17:51
回答 3查看 3.3K关注 0票数 0

我有一个SQL表,显示扫描条形码的人的名字。它们通常每天扫描多个条形码,有时在同一天扫描相同的代码。我需要计算每一个人每天扫描类型的数量。我遇到的问题是,我不想每天为一个人计算相同的条形码值。

下面是SQL表的一个示例。

这是我的SQL

代码语言:javascript
复制
SELECT EVENTDATE, BARCODE, count(BARCODE) AMOUNT
from TIMESHEET
where EVENTDATE = '27-OCT-17' 
group by EVENTDATE, BARCODE
order by EVENTDATE, BARCODE

结果给了我一个5的计数,但我只想要4,因为有两个重复的条形码扫描约翰史密斯同一天。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-30 23:35:34

示例查询不能工作的原因是您没有按名称删除重复项。要做到这一点,您必须根据select语句中的所有内容使用具有名称或组的不同值。例如,子查询EVENTDATE、NAME、条形码的不同组合以删除重复项,然后按事件日期对条形码进行计数。

代码语言:javascript
复制
SELECT dT.EVENTDATE
      ,dT.BARCODE
      ,COUNT(dT.BARCODE) AS TOTAL
  FROM (
         SELECT DISTINCT EVENTDATE, NAME, BARCODE
         FROM TIMESHEET
         --WHERE EVENTDATE = '2017-10-27'  --if you really need to filter by date
                                           --otherwise will group by all dates
       ) AS dT
GROUP BY dT.EVENTDATE  
        ,dT.BARCODE 
票数 0
EN

Stack Overflow用户

发布于 2017-10-30 21:25:11

只需计算DISTINCT名称即可。

代码语言:javascript
复制
SELECT EVENTDATE, BARCODE, count(DISTINCT NAME) AMOUNT
from TIMESHEET
where EVENTDATE = '27-OCT-17' 
group by EVENTDATE, BARCODE
order by EVENTDATE, BARCODE;

但是您应该使用一些name_id而不是name,因为您可以有两个人名为Jhon Smith

票数 4
EN

Stack Overflow用户

发布于 2017-10-30 21:21:28

也许你只是想:

代码语言:javascript
复制
select EVENTDATE, NAME, count(DISTINCT BARCODE) as cnt
from TIMESHEET
where EVENTDATE = '27-OCT-17' 
group by EVENTDATE, NAME
order by EVENTDATE, NAME;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47024310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档