繁体   English   中英

简单的MYSQL计数,分组依据,不能使用Pentaho Report Designer CE

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

我需要编写一个查询,该查询将从两个不同的表中提取结果,对结果进行计数并在一行中返回总结果。

我遇到了一些问题。 当我运行带count表达式的查询时,将返回645行。 645是正确的数字,我想返回1行,将总数显示为“ 645”。

当我使用count表达式时,它将对一个表中的行总数进行计数,而不是对两个表中的行总数进行计数,因此使用count表达式时,将返回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,则查询将不会使用Haveing子句运行。 我不知道为什么,它只是拒绝运行。 这将显示2行,其中1行显示645,另一行显示116(116 + 645 = 761)。 任何帮助将不胜感激。

我是MYSQL的新手,没有培训,没有监督,没有团队可以在互联网上提供帮助,所以请原谅我所说或所做的任何愚蠢的事情

如果您希望查询返回一个结果并进行过滤,那么我期望这样的事情:

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';

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

  • 较短的表别名。
  • 字符串定界符'而不是" (第一个是ANSI标准)
  • 删除HAVING子句,该子句几乎在没有group by的聚合查询中从未使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM