以下是我正在运行的查询。 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
。
答案 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