是否在MySQL查询中在GROUP BY之前或之后应用了DISTINCT?

时间:2014-01-08 16:47:55

标签: mysql group-by distinct

以下是我正在运行的查询。 DISTINCT之前或之后GROUP BY会被应用吗?

表格如下:id, state

id不是唯一的,实体可以有许多具有相同状态或不同状态的条目。

此行为可能会彻底改变我的结果。如果在DISTINCT之前应用GROUP BY,那么它将在整个集合中仅计算每个entity一次(仅显示在一个state中)。如果之后发生,那么每个entity只会按state计算一次,但可以计入多个states

SELECT
    state,
    COUNT( DISTINCT entity_id ) AS count
FROM entities
GROUP BY state
ORDER BY count DESC;

我的目标是每state只对每个实体进行一次计算,但允许entity计入多个states ...这就是我期望的行为在DISTINCT之后应用GROUP BY

2 个答案:

答案 0 :(得分:4)

首先应用GROUP BY

http://sqlfiddle.com/#!2/92876/1

使用您在以下数据中提出的相同查询:

CREATE TABLE Entities (
  state INT,
  id INT
);

INSERT INTO Entities VALUES
  (1, 1), (1, 1), (1, 1),
  (2, 1),
  (3, 1),
  (1, 2),
  (1, 3),
  (2, 3);

输出以下结果:

STATE | COUNT
1     | 3
2     | 2
3     | 1

答案 1 :(得分:3)

GROUP BY首先发生。要进行分组,数据库可能会在状态中查找合适的索引。这将导致类似这样的事情:

Stat ID
---- --
Iowa 1
Iowa 1
Utah 2
Utah 1
Utah 2

分组完成后,distinct会发生。

Iowa 1
Utah 2
Utah 1

然后跟着计数。

Iowa count-distinct = 1
Utah count-distinct = 2

然后ORDER BY count DESC开始。

Utah 2
Iowa 1