【问题标题】:group by access seperate column按访问单独列分组
【发布时间】:2015-08-25 23:55:05
【问题描述】:

我对 SQL 非常陌生,并且有以下(看似简单的)数据库查询。

我有一个表格,其中包含一组员工的所有时间跟踪信息:

date        employeeId timeIn timeOut
01/01/20    1355       12:00  4:00
01/01/20    1355       4:30   6:00
01/01/15    1234       9:00   12:00
02/01/15    5555       5:00   6:00
02/01/15    1111       1:00   4:00

对于每个日期,我想计算工作的唯一员工的数量,以如下表格结尾:

date      totalEmployeesWorked
01/01/15  2
02/01/15  2

我也想忽略几个 ID。到目前为止,我想出了:

我在 MS Access 2003 中尝试过以下查询:

SELECT [TimeTrackingLog-sql].date, COUNT(DISTINCT callerName)
FROM [TimeTrackingLog-sql]
GROUP by [TimeTrackingLog-sql].date

它抱怨“缺少接线员”,突出显示了我对 callerName 的使用。

【问题讨论】:

  • count 本身就是一个聚合函数。你能稍微澄清一下这个问题吗?您收到错误消息吗?结果错误?
  • 我尝试更新了原来的帖子,很抱歉不够清晰
  • 更好地添加示例数据和预期输出?
  • 请确保在创建问题时使用正确的标签。删除了 mysql 标记,因为这邀请了一个在您使用的实际数据库中不起作用的答案(MS Access)。

标签: sql ms-access select group-by


【解决方案1】:

好消息是您的查询是完全合法的(而且是直截了当的!)ANSI SQL,它适用于任何合理的数据库。坏消息是您使用的 MS Access 不支持这种语法。

不过,它可以通过子查询来解决:

SELECT   t.date, COUNT(*)
FROM     (SELECT DISTINCT [TimeTrackingLog-sql].date, 
                          [TimeTrackingLog-sql].callerName
          FROM   [TimeTrackingLog-sql]) t
GROUP BY t.date

【讨论】:

  • 你的 SQL 有一个小错误。 callername 后面的括号应该去掉。
  • @MartinParkin - 感谢您的注意(该死的错别字!:()。已修复。
【解决方案2】:

这将起作用:-

SELECT date, count(distinct `employeeId`) FROM `table_name` group by date;

【讨论】:

  • 问题被错误地标记为mysql。它实际上在 MS Access 中,这会使您的答案不正确(尽管它可以在 mysql 中使用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
相关资源
最近更新 更多