简单 MYSQL 计数、分组依据,无法使用 Pentaho Report Designer CE

Simple MYSQL count, group by, not working using Pentaho Report Designer CE

我需要编写一个查询,该查询将从两个不同的 table 中提取,计算结果并将 return 排成一行给我,即总结果。

我遇到了一些问题。当我 运行 查询 没有 计数表达式时,我 return 编辑了 645 行。 645 是正确的数字,我想 returned 1 行显示总数为“645”。

当我使用计数表达式时,它会计算 一个 table 中的总行数,而不是两个,所以使用计数表达式,我是 returned with 761(这是没有子句生效的总行数)。

SELECT
     `cuesheet_tx_dates`.`txdate`,
     `cuesheet_tx_dates`.`trans_station`,
     `cuesheets`.`status`,
     count(`cuesheet_tx_dates`.`txdate`)
FROM
     `cuesheet_tx_dates` INNER JOIN `cuesheets` ON `cuesheet_tx_dates`.`cuesheets_id` = `cuesheets`.`id`
WHERE
     `cuesheet_tx_dates`.`txdate` BETWEEN "15-01-01"AND "15-01-31"
 AND `cuesheet_tx_dates`.`trans_station` = "HIS"
HAVING
     `cuesheets`.`status` = "C"

如果我使用 Group By,查询将不会 运行 带有 Having 子句。不知道为什么,就是不肯运行。这将显示 2 行,1 行显示 645,另一行显示 116 (116 + 645 = 761)。任何帮助将不胜感激。

我是 MYSQL 的新手,没有培训,没有监督,没有团队寻求帮助,只有互联网所以请原谅我说过或做过的任何愚蠢的事情

如果您想要一个 returns 一个结果并进行过滤的查询,那么我期待这样的结果:

SELECT count(*)
FROM cuesheet_tx_dates td INNER JOIN
     cuesheets s
     ON td.cuesheets_id = s.id
WHERE td.txdate BETWEEN '2015-01-01' and '2014-01-31' AND 
      td.trans_station = 'HIS' AND
      s.status = 'C';

我所做的更改主要是为了提高可读性:

  • 更短的 table 别名。
  • ' 的字符串分隔符而不是 "(第一个是 ANSI 标准)
  • 删除 HAVING 子句,它几乎从不用于没有 group by.
  • 的聚合查询
  • 对日期常量使用 ISO 标准格式。

...或者如果您还希望显示分组数据

SELECT cuesheet_tx_dates.txdate,
       cuesheet_tx_dates.trans_station,
       cuesheets.status,
       count(*) AS number_of_records
FROM cuesheet_tx_dates td INNER JOIN
     cuesheets s
     ON td.cuesheets_id = s.id
WHERE td.txdate BETWEEN '2015-01-01' and '2014-01-31' AND 
      td.trans_station = 'HIS' AND
      s.status = 'C'
GROUP BY cuesheet_tx_dates.txdate,
         cuesheet_tx_dates.trans_station,
         cuesheets.status;