mysql - mysql聚合查询返回错误结果
问题描述
我在两个表中有数据,我需要加入并返回其中一个表中记录的出现次数,
Employee 表中的数据如下所示,
empId workpatternId
1 20
workPattern 表中的数据如下所示,
workpatternId monday tuesday wednesday thursday friday saturday sunday
20 ALL ALL ALL ALL NULL NULL ALL
以下查询应返回 5,即 ALL 的计数,但返回 7,
SELECT empId,b.workingPatternId, COUNT(monday='ALL') +
COUNT(tuesday='ALL') + COUNT(wednesday='ALL')+ COUNT(thursday='ALL') +
COUNT(friday='ALL')+ COUNT(saturday='ALL')+ COUNT(sunday='ALL') AS COUNT
FROM workPattern b
join Employee e on (e.workpatternId = b.workpatternId) and e.empId = 1
GROUP BY empId ;
查询有什么问题?
编辑
解决方案
workPattern
我没有看到聚合的意义,因为似乎您在per中只有一行empId
。你可以这样写:
SELECT e.empId, wp.workingPatternId,
(wp.monday = 'ALL')
+ (wp.tuesday = 'ALL')
+ (wp.wednesday = 'ALL')
+ (wp.thursday = 'ALL')
+ (wp.friday = 'ALL')
+ (wp.saturday = 'ALL')
+ (wp.sunday = 'ALL') cnt
FROM workPattern wp
INNER Employee e on e.workpatternId = wp.workpatternId
WHERE e.empId = 1
如果您出于某种原因需要聚合,那么您需要sum()
而不是count()
:后者计算所有非空值,而错误条件被评估为0
(不是null
,因此在您的查询中考虑):
SELECT
SUM(
(wp.monday = 'ALL')
+ (wp.tuesday = 'ALL')
+ (wp.wednesday = 'ALL')
+ (wp.thursday = 'ALL')
+ (wp.friday = 'ALL')
+ (wp.saturday = 'ALL')
+ (wp.sunday = 'ALL')
) cnt
FROM workPattern wp
INNER JOIN Employee e on e.workpatternId = wp.workpatternId
WHERE e.empId = 1
推荐阅读
- javascript - 从 url 获取(使用 javascript)json(使用 nodejs 发布)的问题
- javascript - Azure AppInsights 默认 TelemetryInitializer - Javascript SDK
- cmd - 在命令提示符下检查每个输出行的字符串中的子字符串
- meteor - 将数组元素迭代为集合文档(Meteor)中的单个值
- gcc - 如何限制 GCC 中的自动矢量化级别?
- django - Django:AttributeError:类型对象'GroupModel'没有属性'_meta'
- php - 路由“”的参数“”必须匹配“[^/]++”(“”给定)才能生成对应的URL
- python - 获取定义变量的行号
- php - 如何限制 simplexml_load_file() 的结果
- azure - 如何找到 Azure 拉取请求的 threadID?