SELECT查询中的多个计数函数

时间:2010-09-07 11:19:23

标签: mysql optimization count

我有像这样的选择查询

select count(distinct id)*100/totalcount as freq, count (distinct id) from 
<few joins, conditions, gorup by here> .....

这会导致MySql 5.0下的2次计算吗?如果这是一个问题,我也可以计算我的应用中的频率。我知道Adding percentages to multiple counts in one SQL SELECT Query中提供的解决方案,但我只是想避免嵌套查询

1 个答案:

答案 0 :(得分:2)

select count(distinct id)*100/totalcount as freq, count (distinct id) from 
<few joins, conditions, gorup by here> .....

是的,这将导致多次评估。

DISTINCT id上的每个记录集将为每个功能单独构建

请注意,如果不是DISTINCTMySQL只会使用每个记录一次(尽管在多个函数调用中)。

由于COUNT非常便宜,因此函数调用几乎不会增加整个查询时间。

您可以通过以下方式重写您的查询:

SELECT  COUNT(id) * 100 / totalcount AS freq,
        COUNT(id)
FROM    (
        SELECT  DISTINCT id
        FROM    original_query
        ) q

顺便说一下,为什么在一个查询中同时需要GROUP BYDISTINCT?您能否按原样发布原始查询?