Клиенты, которые приобрели более $ 250 - PullRequest
0 голосов
/ 01 мая 2018

У меня есть 5 таблиц:

    CREATE TABLE Client_master(
    Client_no int(5),
    Client_name varchar(10),
    c_address varchar(10),
    Bdate date,
    PRIMARY KEY(Client_no)
    );

CREATE TABLE Product_master(
    product_no int(5),
    Description varchar(20),
    saleprice int(5),
    costprice int(5),
    PRIMARY KEY(product_no)
    );

CREATE TABLE Sales_master(
    Salesmno int(5),
    Sname varchar(10),
    s_address varchar(5),
    salary float(5),
    Remarks varchar(10),
    PRIMARY KEY(Salesmno)
    );
CREATE TABLE Sales_order(
    order_no int(5),
    Client_no int(5),
    Odate date,
    Delv_add varchar(20),
    Salesmno int(5),
    PRIMARY KEY(order_no),
    FOREIGN KEY(Client_no) REFERENCES Client_master(Client_no),
    FOREIGN KEY(Salesmno) REFERENCES Sales_master(Salesmno)
    );

CREATE TABLE Sales_order_detail(
    order_no int(5),
    product_no int(5),
    qty_order int(5),
    product_rate int(5),
    qty_dispatch int(5),
    FOREIGN KEY(order_no) REFERENCES Sales_order(order_no),
    FOREIGN KEY(product_no) REFERENCES Product_master(product_no)
    );

Я должен определить имя клиентов, которые купили более 250 долларов. Я попробовал это:

SELECT cm.Client_name, sum(pm.saleprice * sod.product_no)
FROM Sales_order_detail sod 
LEFT JOIN Product_master pm ON sod.product_no = pm.product_no 
LEFT JOIN Sales_order so ON sod.order_no = so.order_no 
LEFT JOIN Client_master cm ON so.Client_no = cm.Client_no 
GROUP BY cm.Client_no WHERE sum(pm.saleprice * sod.product_no) > 250; 

Но выдает ошибку вроде этого:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса около 'ГДЕ сумма (pm.saleprice * sod.product_no)> 250' в строке 6

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Ваша синтаксическая ошибка из-за where. Но вам не нужно left join. Вы можете написать запрос как:

SELECT cm.Client_name, sum(pm.saleprice * sod.product_no) as total
FROM Sales_order_detail sod JOIN
     Product_master pm
     ON sod.product_no = pm.product_no JOIN
     Sales_order so
     ON sod.order_no = so.order_no JOIN
     Client_master cm
     ON so.Client_no = cm.Client_no 
GROUP BY cm.Client_no 
HAVING total > 250; 

Обратите внимание, что вы также можете использовать псевдоним столбца и использовать его в предложении HAVING.

0 голосов
/ 01 мая 2018
Предложение

Where должно идти после предложения from, поэтому вам нужно использовать здесь выражение having, а не where

SELECT cm.Client_name, sum(pm.saleprice * sod.product_no)
FROM Sales_order_detail sod 
LEFT JOIN Product_master pm ON sod.product_no = pm.product_no 
LEFT JOIN Sales_order so ON sod.order_no = so.order_no 
LEFT JOIN Client_master cm ON so.Client_no = cm.Client_no 
GROUP BY cm.Client_no 
having sum(pm.saleprice * sod.product_no) > 250;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...