标签: distinct

多对多关系中不同 ID 的最快查询

我在 PostgreSQL 9.4 中有这个表:

CREATE TABLE user_operations( 
    id SERIAL PRIMARY KEY, 
    operation_id integer, 
    user_id integer )
Run Code Online (Sandbox Code Playgroud)

该表由~1000-2000不同的操作组成,每个操作对应于所有用户80000-120000集合S的某个子集(每个子集由大约元素组成):

S = {1, 2, 3, ... , 122655}
Run Code Online (Sandbox Code Playgroud)

参数:

work_mem = 128MB
table_size = 880MB
Run Code Online (Sandbox Code Playgroud)

我也有一个关于operation_id.

问题:user_id对于operation_id集合的重要部分(20%-60%)查询所有不同的最佳计划是什么,例如:

SELECT DISTINCT user_id FROM user_operation WHERE operation_id < 500
Run Code Online (Sandbox Code Playgroud)

可以在表上创建更多索引。目前,查询的计划是:

HashAggregate  (cost=196173.56..196347.14 rows=17358 width=4) (actual time=1227.408..1359.947 rows=598336 loops=1)
  ->  Bitmap Heap Scan on user_operation  (cost=46392.24..189978.17 rows=2478155 width=4) (actual time=233.163..611.182 rows=2518122 loops=1)
        Recheck Cond: …
Run Code Online (Sandbox Code Playgroud)

postgresql performance count distinct postgresql-performance

6
推荐指数
1
解决办法
1293
查看次数

如何使用隐式 DISTINCT 创建聚合函数,如 sum?

我们有一个 ERP 系统,它允许使用聚合(例如SUM(foo))但不允许使用 DISTINCT(例如SUM(DISTINCT foo).

是否可以创建一个聚合函数 ( SUM_DISTINCT),它返回与 相同的结果SUM(DISTINCT foo),所以SUM_DISTINCT(foo) = SUM(DISTINCT foo)

postgresql aggregate distinct

6
推荐指数
1
解决办法
3302
查看次数

两列的不同组合

我目前正在尝试在表中找到不同的组合,因为其中两列彼此之间存在多对多关系。

数据围绕着针对特定客户端运行的备份策略,可以总结如下:

在此处输入图片说明

我想为上表生成的答案是7,因为有很多不同的组合。

有没有人知道如何做到这一点?我曾尝试尝试使用嵌套计数和不同的值(我可以过滤到一列,但不能同时过滤两列)。

mysql count mysql-5.1 distinct

5
推荐指数
1
解决办法
3万
查看次数

在 MySQL 5.7.13 和 5.7.11 中容忍 SQL 错误(orderby not in distinct,select not in group by)

此问题与以下 2 个 SQL 错误有关(我添加的换行符)

MySql.Data.MySqlClient.MySqlException (0x80004005):
Expression #2 of ORDER BY clause is not in SELECT list, references column 'auitool2014.a.prog' which is not in SELECT list;
this is incompatible with DISTINCT


MySql.Data.MySqlClient.MySqlException (0x80004005): 
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'H.C51' which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by
Run Code Online (Sandbox Code Playgroud)

我的问题很容易描述,即使没有发布原始 SQL。我有一个5.7.11-log在 Windows 上运行的 Mysql服务器,我可以SELECT A,B GROUP BY A并且SELECT …

mysql syntax group-by distinct mysql-5.7

5
推荐指数
1
解决办法
1243
查看次数

Postgres:将一个表中的不同值插入到另一个带有约束的表中

我试图在删除重复条目的同时将数据从一个 PostgreSQL 9.3 表插入到另一个表。

我有两个包含电子邮件地址的表。

主表包含电子邮件和每个电子邮件地址的标签。组合(email, tag)必须是唯一的,为此有一个限制Unique(email, tag)

第二个表是从仅包含电子邮件地址的文本文件中动态创建的。那里有很多重复。

我需要将临时表中的数据导入主表而不破坏上述约束。对于包含电子邮件地址的特定文件,标签是恒定的。

表结构:

CREATE TABLE emails (   
  email character varying(128),
  tag bigint,
  CONSTRAINT "unique-tag-email" UNIQUE (email, tag) )
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE emails_temp (email character varying(128)
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

insert into emails(tag,email) 
select 
 655,t.email 
from 
 emails_temp as t 
where 
 not exists ( select email from emails where email = t.email )
Run Code Online (Sandbox Code Playgroud)

注意:655 只是某组电子邮件地址的标记。

这是我得到的错误:

错误:重复键值违反唯一约束“唯一标签电子邮件”SQL 状态:23505 详细信息:密钥(电子邮件,标签)=(user@hotmail.com,655)已经存在。

文件中确实有两个电子邮件地址 user@hotmail.com。

废话不多说,因为这个错误,主表(email)里什么都没有添加。

我究竟做错了什么?

postgresql constraint distinct

5
推荐指数
1
解决办法
7637
查看次数

具有排列的 DISTINCT 列组合

我的 postgresql 列结构如下所示:

id  | from | to
---------------
1   |  A   |  B
2   |  A   |  B 
3   |  C   |  D
Run Code Online (Sandbox Code Playgroud)

现在我想要一个看起来像这样的结果:

 res 
-----
'A:B'
'B:A' 
'C:D'
'D:C'
Run Code Online (Sandbox Code Playgroud)

其中第一行和行从 A:B 排列到 B:A 和 'C:D' 到 'D:C',第二列由于不同的操作而被省略。

postgresql distinct

5
推荐指数
1
解决办法
1632
查看次数

MySQL:一起使用 DISTINCT 和 GROUP BY?

我看到以下同时使用 DISTINCT 和 GROUP BY 的 MySQL 查询:

SELECT  DISTINCT user_id, post_id, post_content
    FROM  some_table
    GROUP BY  post_id, user_id
    HAVING  post_content LIKE '%abc%';
Run Code Online (Sandbox Code Playgroud)

这是一个与查询一起使用的场景:每个用户都有一个唯一的 id,user_id,并且可以发表多个由唯一 id 标识的帖子post_id。每个帖子都会包含一些文本。

我发现这令人困惑(来自 Oracle DB 之后)并有以下问题:

  1. 使用GROUP BY而不做任何聚合是什么意思?
  2. SELECTvs in中切换列的顺序有什么意义GROUP BY
  3. 从 省略第三列是什么意思GROUP BY
  4. 为什么DISTINCT与 一起使用GROUP BY?在对最终结果或之前完成所有分组之后,是否运行不同的操作?

mysql oracle aggregate group-by distinct

5
推荐指数
2
解决办法
2511
查看次数

PostgreSQL 可以使用索引来加速计数(不同)查询吗?

考虑以下示例:

CREATE TABLE test (
  id SERIAL,
  some_integer INT
);

INSERT INTO test (some_integer)
SELECT FLOOR(RANDOM()*100000) from generate_series(1,100000) s(i);

CREATE INDEX some_integer_idx ON test (some_integer);

EXPLAIN ANALYZE SELECT COUNT(DISTINCT some_integer) from test;
Run Code Online (Sandbox Code Playgroud)

它返回以下查询计划:

CREATE TABLE test (
  id SERIAL,
  some_integer INT
);

INSERT INTO test (some_integer)
SELECT FLOOR(RANDOM()*100000) from generate_series(1,100000) s(i);

CREATE INDEX some_integer_idx ON test (some_integer);

EXPLAIN ANALYZE SELECT COUNT(DISTINCT some_integer) from test;
Run Code Online (Sandbox Code Playgroud)

我很惊讶它仍然在测试中进行顺序扫描。简单地计算索引中的行数不是更快吗?

postgresql index count distinct

5
推荐指数
1
解决办法
1593
查看次数

将 SELECT DISTINCT 更改为 UPDATE DISTINCT

如何将SELECT DISTINCT查询修改为UPDATE DISTINCT查询?

重要的是它只更新不同的记录,因为有多个记录与每个 [Finance_Project_Number] 相关联(由于 CRUD 操作)。我只想更新一条记录,因为这只会启动验证数据等的不同过程。

如果由于 DISTINCT 导致多条记录折叠为一行,则可以更新其中任何一条记录 - 没关系。

当我运行我的选择查询时,我得到的结果是:6 982:

SELECT DISTINCT
    [Finance_Project_Number]
FROM [InterfaceInfor].[dbo].[ProjectMaster]
WHERE 
    NOT EXISTS 
    (
        SELECT *
        FROM [IMS].[dbo].[THEOPTION]  
        WHERE 
            [InterfaceInfor].[dbo].[ProjectMaster].[Finance_Project_Number] =
            [IMS].[dbo].[THEOPTION].[NAME]
    );
Run Code Online (Sandbox Code Playgroud)

这是我将查询转换为查询的尝试DISTINCT UPDATE,但这会更新 15 353 条记录:

UPDATE [InterfaceInfor].[dbo].[ProjectMaster]
SET 
    [Processing_Result_Text] = 'UNIQUE',
    [Processing_Result] = 0
WHERE 
    NOT EXISTS 
    (
        SELECT *
        FROM [IMS].[dbo].[THEOPTION]  
        WHERE 
            [InterfaceInfor].[dbo].[ProjectMaster].[Finance_Project_Number] =
            [IMS].[dbo].[THEOPTION].[NAME]
    );
Run Code Online (Sandbox Code Playgroud)

sql-server update distinct

4
推荐指数
1
解决办法
2万
查看次数

有没有办法 SELECT n ON (如 DISTINCT ON,但每个都不止一个)

我有一个us_customers看起来像这样的表(有数十万行):

+----------+----------+
|    id    | us_state |
+----------+----------+
| 12345678 | MA       |
| 23456781 | AL       |
| 34567812 | GA       |
| 45678123 | FL       |
| 56781234 | AZ       |
| 67812345 | MA       |
| 78123456 | CO       |
| 81234567 | FL       |
+----------+----------+
Run Code Online (Sandbox Code Playgroud)

...我想n从每个us_state.

有没有办法在 PostgreSQL 9.3 中干净利落地做到这一点?

我可以通过以下方式us_state轻松地从每个客户那里获得一位客户:

SELECT DISTINCT ON (us_state) id
FROM us_customers
ORDER BY us_state;
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要来自每个州的三个客户,有没有一种方法可以在不多次运行相同查询的情况下做到这一点?

postgresql greatest-n-per-group distinct

4
推荐指数
1
解决办法
1369
查看次数