我有像这样的选择查询
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中提供的解决方案,但我只是想避免嵌套查询
答案 0 :(得分:2)
select count(distinct id)*100/totalcount as freq, count (distinct id) from
<few joins, conditions, gorup by here> .....
是的,这将导致多次评估。
DISTINCT id
上的每个记录集将为每个功能单独构建
请注意,如果不是DISTINCT
,MySQL
只会使用每个记录一次(尽管在多个函数调用中)。
由于COUNT
非常便宜,因此函数调用几乎不会增加整个查询时间。
您可以通过以下方式重写您的查询:
SELECT COUNT(id) * 100 / totalcount AS freq,
COUNT(id)
FROM (
SELECT DISTINCT id
FROM original_query
) q
顺便说一下,为什么在一个查询中同时需要GROUP BY
和DISTINCT
?您能否按原样发布原始查询?