使用count和suppress / ignore group by

时间:2013-06-09 16:56:34

标签: mysql

是否可以在select子句中使用countgroup by在计数中被抑制?我需要count忽略group by子句

我得到了这个计算总数的查询。该查询是通用生成的,因此我不能进行任何全面的更改,如子查询等。

在某些特定情况下,需要group by来检索正确的行,因此无法删除group by

SELECT count(dv.id) num
FROM `data_voucher` dv
LEFT JOIN `data_voucher_enclosure` de ON de.data_voucher_id=dv.id
WHERE IF(de.id IS NULL,0,1)=0
GROUP BY dv.id

2 个答案:

答案 0 :(得分:3)

  

是否可以在select count中使用group by count中的count?我需要group by忽略group by子句

好吧,你问题的答案就是你不能拥有一个适用于所有结果的聚合,同时拥有group by语句。这就是{{1}}创建改变聚合行为的组的全部目的:

  

GROUP BY子句导致聚合在组中(自然地)发生在您命名的列中。

cf this blog post这只是我在谷歌上发现的第一个关于此主题的结果。

你需要重新设计你的查询,最简单的方法是创建一个子查询,或者一个关节的地狱。但是如果没有架构和关于你希望这个查询做什么的一些上下文,我不能给你一个有效的替代方案。

我可以告诉你,你正试图用锤子拧紧螺丝......

答案 1 :(得分:0)

找到了使用COUNT DISTINCT的替代方案

SELECT count(distinct dv.id) num
FROM `data_voucher` dv
LEFT JOIN `data_voucher_enclosure` de ON de.data_voucher_id=dv.id
WHERE IF(de.id IS NULL,0,1)=0