我需要编写一个查询,它将从两个不同的表中提取,计算结果并在一行中返回给我,即总结果。
我遇到了一些问题。当我运行查询而不是计数表达式时,我返回645行。 645是正确的数字,我想返回1行显示总数为“645”。
当我使用count表达式时,它会计算 one 表中的总行数而不是两者,所以使用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,则查询将不会与Having子句一起运行。我不知道为什么,它只是拒绝运行。这将显示2行,1显示645,另一行显示116(116 + 645 = 761)。任何帮助将不胜感激。
我是MYSQL的新手,没有培训,没有监督,没有团队可以帮助上网,所以请原谅我说过或做过的任何愚蠢的事情
答案 0 :(得分:1)
如果你想要一个返回一个结果并进行过滤的查询,那么我期待这样的事情:
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
的聚合查询中使用。答案 1 :(得分:0)
...或者如果你想要显示分组数据
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;