mysql - 购买超过 250 美元的客户

标签 mysql sql

我有 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; 

但是它给出了这样的错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE sum(pm.saleprice * sod.product_no) > 250' at line 6

最佳答案

您的语法错误是由于 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 子句中使用它。

关于mysql - 购买超过 250 美元的客户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50114872/

相关文章:

php - 使用 php 从数据库中提取 pdf BLOB 并将其显示在 html 页面中不起作用

sql - 类似的 MS SQL 模式

java - 从数据库中的不同表检索数据发送要执行的SQL代码,返回数据?

php - 尝试添加表时出现错误#1064

php - Lucene查询匹配多个单词,如mysql的 "LIKE %my string%"

PHP/MYSQL 搜索表单显示空结果

mysql - 存储和显示多个日期范围值 SQL

mysql - 用于搜索可用日期的正确 mySQL 语句

c# - 为字段填充返回 SQL DataRow 的正确方法

c# - 以编程方式将多个 SQL 列组合并存储到一个列中