[英]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
。 ...或者如果您也希望显示分组数据
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.