【问题标题】:Narrowing down search using conditions使用条件缩小搜索范围
【发布时间】:2021-01-26 17:29:18
【问题描述】:

尝试在 #TOAD 中使用 #SLQ 对超过 1200 万条记录进行非常狭窄的搜索,同时期望得到 150 条记录的结果。 有以下:

-Account  CODE  Product Amount
 1        100   001     10
 1        120   002     5
 1        130   003     20
 2        100   001     30
 2        130   003     10
 3        130   003     20

试过了:

select *
from table
group by Account, CODE, Product, Amount
having CODE in (100,130)

但在结果中我得到了帐户 1,但情况并非如此,因为我只需要具有 100 和 100/130 组合的帐户

需要获取只有code 130的账号,二次搜索只有code 100和130的账号。

但我尝试的所有操作都产生了包含代码 100 或 130 的帐户,例如帐户 1。

尝试 group by 然后应用 have,尝试在 where 子句上插入条件。 但帐户总是包含在其数据中具有代码 100 和 130 的结果中,而不仅仅是代码 100 和 130。

【问题讨论】:

  • 显示到目前为止您已经尝试过的内容。也不清楚您要做什么。
  • 以下是一些关于如何更好地构建问题的提示:meta.stackoverflow.com/a/271056/460557
  • 试过:从代码 = 100 的表中选择 *。但它也填充帐户 1,我不需要,因为我只需要 100 个代码或 100/130 个代码组合的帐户

标签: mysql sql toad


【解决方案1】:

这会有帮助吗?第 1 - 12 行中的样本数据;您可能感兴趣的查询从第 13 行开始。

SQL> with test (account, code, product, amount) as
  2    (select 1, 100, '001', 10 from dual union all
  3     select 1, 120, '002',  5 from dual union all
  4     select 1, 130, '003', 20 from dual union all
  5     --
  6     select 2, 100, '001', 30 from dual union all
  7     select 2, 130, '003', 10 from dual union all
  8     --
  9     select 3, 130, '003', 20 from dual union all
 10     --
 11     select 4, 200, '001', 10 from dual union all
 12     select 4, 100, '002', 20 from dual
 13    )
 14  select * from test
 15  where account in (select account
 16                    from test
 17                    group by account
 18                    having count(distinct code) <= 2
 19                       and min(code) in (100, 130)
 20                       and max(code) in (100, 130)
 21                   );

   ACCOUNT       CODE PRO     AMOUNT
---------- ---------- --- ----------
         2        130 003         10
         2        100 001         30
         3        130 003         20

SQL>

【讨论】:

  • 感谢您的尝试。问题是我需要在 1200 万条记录中进行搜索,并且无法将它们全部输入以进行联合。谢谢
  • 你没看到我写的吗?前 13 行以 CTE(公用表表达式,又名 WITH 因式分解子句)的形式表示样本数据。如果您提供了正确的测试用例(CREATE TABLE 和 INSERT INTO 语句),我就不必自己创建示例。所有你已经在你的表中 - 不,你不会输入 1200 万个工会。您确实需要的查询从第 14 行开始。
  • 哦好的,明白了。很抱歉写得不够清楚,对sql来说还是新的。问题是我没有创建表或具有插入权限。基本上需要查询给定的表。但肯定会尝试使用您的示例。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2019-08-12
  • 2019-09-08
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
相关资源
最近更新 更多