Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 针对购买流行产品的客户的Oracle查询_Sql_Oracle_Join_Select_Subquery - Fatal编程技术网

Sql 针对购买流行产品的客户的Oracle查询

Sql 针对购买流行产品的客户的Oracle查询,sql,oracle,join,select,subquery,Sql,Oracle,Join,Select,Subquery,我有三张表:客户表、订单表和行项目表。它们的设置如下: CREATE TABLE cust_account( cust_id DECIMAL(10) NOT NULL, first VARCHAR(30), last VARCHAR(30), address VARCHAR(50), PRIMARY KEY (cust_id)); CREATE TABLE orders( order_num DECIMAL(10) NOT NULL, cust_id DECIMAL(10) NOT NULL,

我有三张表:客户表、订单表和行项目表。它们的设置如下:

CREATE TABLE cust_account(
cust_id DECIMAL(10) NOT NULL,
first VARCHAR(30),
last VARCHAR(30),
address VARCHAR(50),
PRIMARY KEY (cust_id));

CREATE TABLE orders(
order_num DECIMAL(10) NOT NULL,
cust_id DECIMAL(10) NOT NULL,
order_date DATE,
PRIMARY KEY (order_num));

CREATE TABLE line_it(
order_id DECIMAL(10) NOT NULL,
line_id DECIMAL(10) NOT NULL,
item_num DECIMAL(10) NOT NULL,
PRIMARY KEY (order_id, line_id),
FOREIGN KEY (item_id) REFERENCES products);
我需要编写一个查询,选择购买了3人或更多人购买的物品的客户、他们的姓名和地址。我有以下疑问:

SELECT cust_account.cust_id, cust_account.first, cust_account.last, cust_account.address
FROM cust_account
INNER JOIN orders ON cust_account.cust_id = orders.cust_id
INNER JOIN line_it ON orders.order_id = line_it.order_id
GROUP BY cust_account.cust_id, cust_account.last
HAVING COUNT(line_it.item_num) = (
    SELECT COUNT (DISTINCT order_num > 3)
    FROM line_it
    );
我甚至需要将其作为子查询吗?我有点迷路了。感谢您的帮助。

从“3人或更多人购买的物品”开始。您可以通过以下操作获得这些信息:

select li.item_id
from line_item li join
     order_info oi
     on li.order_id = oi.order_id
group by li.item_id
having count(distinct oi.customer_id) >= 3;
现在,您希望这一组中有客户。嗯,嗯:

select distinct ca.*
from customer_account ca join
     orderinfo oi
     on ca.customer_id = oi.customer_id join
     line_item li
     on li.order_id = oi.order_id
where li.item_id in (select li.item_id
                     from line_item li join
                          order_info oi
                          on li.order_id = oi.order_id
                     group by li.item_id
                     having count(distinct oi.customer_id) >= 3
                    );
您还可以使用窗口函数来表达这一点:

select distinct ca.*
from (select ca.*, count(distinct customer_id) over (partition by li.item_id) as num_customers_on_item
      from customer_account ca join
           orderinfo oi
           on ca.customer_id = oi.customer_id join
           line_item li
           on li.order_id = oi.order_id
     ) ca
where num_customers_on_item >= 3;

您可以使用以下查询

SELECT distinct customer_account.* FROM line_item, order_info ,customer_account  where item_id in (
--Selecting only item purchased 3 or more
SELECT item_id FROM  line_item  group by item_id  having count(1)  >=3
)
and line_item.order_id = order_info.order_id
and customer_account.customer_id = order_info.customer_id
;