在MySQL查询中,是在GROUP BY之前还是之后应用DISTINCT?
下面是我正在运行的查询。在MySQL查询中,是在GROUP BY之前还是之后应用DISTINCT?,mysql,group-by,distinct,Mysql,Group By,Distinct,下面是我正在运行的查询。不同的是在分组之前还是之后应用的 该表如下所示:id,state id不是唯一的,一个实体可以有许多状态相同或不同的条目 这种行为可能会彻底改变我的结果。如果在分组依据之前应用了DISTINCT,则它将在整个集合中仅对每个实体进行一次计数(仅在一个状态下显示)。如果发生在之后,则每个实体将仅在每个状态中计数一次,但可以在许多状态中计数 SELECT state, COUNT( DISTINCT entity_id ) AS count FROM entit
不同的
是在分组之前还是之后应用的
该表如下所示:id,state
id
不是唯一的,一个实体可以有许多状态相同或不同的条目
这种行为可能会彻底改变我的结果。如果在分组依据
之前应用了DISTINCT
,则它将在整个集合中仅对每个实体
进行一次计数(仅在一个状态下显示
)。如果发生在之后,则每个实体
将仅在每个状态
中计数一次,但可以在许多状态
中计数
SELECT
state,
COUNT( DISTINCT entity_id ) AS count
FROM entities
GROUP BY state
ORDER BY count DESC;
我的目标是每个
状态只对每个实体进行一次计数
,但允许在多个状态中对实体进行计数
。。。如果在groupby
之后应用DISTINCT
,groupby
首先应用
对以下数据使用与问题中相同的查询:
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
分组依据
首先发生。要进行分组,数据库可能会根据状态查找合适的索引。这将导致如下结果:
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
然后,orderbycountdesc
开始生效
Utah 2
Iowa 1
数据库中的同一行永远不会被计数超过一次。即使先运行GROUP BY,该行也永远不会被放入多个组中—只有一个组。您是否有多行具有相同的ID和不同的状态值?
我有多行具有相同的实体和不同的状态。我更新了我的问题以反映这一点。下降实际上是另一种方式。