where子句

fhg3lkii  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(366)

我有追随者tables:- - 员工-订单-订单详情

  1. Employees
  2. +-----------------+--------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +-----------------+--------------+------+-----+---------+-------+
  5. | EmployeeID | int | NO | PRI | NULL | |
  6. | LastName | varchar(20) | YES | | NULL | |
  7. | FirstName | varchar(10) | YES | | NULL | |
  8. | Title | varchar(30) | YES | | NULL | |
  9. | TitleOfCourtesy | varchar(25) | YES | | NULL | |
  10. | BirthDate | datetime | YES | | NULL | |
  11. | HireDate | datetime | YES | | NULL | |
  12. | Address | varchar(60) | YES | | NULL | |
  13. | City | varchar(15) | YES | | NULL | |
  14. | Region | varchar(15) | YES | | NULL | |
  15. | PostalCode | varchar(10) | YES | | NULL | |
  16. | Country | varchar(15) | YES | | NULL | |
  17. | HomePhone | varchar(24) | YES | | NULL | |
  18. | Extension | varchar(4) | YES | | NULL | |
  19. | Notes | mediumtext | YES | | NULL | |
  20. | ReportsTo | int | YES | | NULL | |
  21. | PhotoPath | varchar(255) | YES | | NULL | |
  22. | Salary | float | YES | | NULL | |
  23. +-----------------+--------------+------+-----+---------+-------+
  24. Orders
  25. +----------------+---------------+------+-----+---------+-------+
  26. | Field | Type | Null | Key | Default | Extra |
  27. +----------------+---------------+------+-----+---------+-------+
  28. | OrderID | int | NO | PRI | NULL | |
  29. | CustomerID | varchar(5) | YES | | NULL | |
  30. | EmployeeID | int | YES | | NULL | |
  31. | OrderDate | datetime | YES | | NULL | |
  32. | RequiredDate | datetime | YES | | NULL | |
  33. | ShippedDate | datetime | YES | | NULL | |
  34. | ShipVia | int | YES | | NULL | |
  35. | Freight | decimal(10,4) | YES | | NULL | |
  36. | ShipName | varchar(40) | YES | | NULL | |
  37. | ShipAddress | varchar(60) | YES | | NULL | |
  38. | ShipCity | varchar(15) | YES | | NULL | |
  39. | ShipRegion | varchar(15) | YES | | NULL | |
  40. | ShipPostalCode | varchar(10) | YES | | NULL | |
  41. | ShipCountry | varchar(15) | YES | | NULL | |
  42. +----------------+---------------+------+-----+---------+-------+
  43. OrdreDetails
  44. +-----------+---------------+------+-----+---------+-------+
  45. | Field | Type | Null | Key | Default | Extra |
  46. +-----------+---------------+------+-----+---------+-------+
  47. | OrderID | int | YES | MUL | NULL | |
  48. | ProductID | int | YES | MUL | NULL | |
  49. | UnitPrice | decimal(10,4) | YES | | NULL | |
  50. | Quantity | smallint | YES | | NULL | |
  51. | Discount | double | YES | | NULL | |
  52. +-----------+---------------+------+-----+---------+-------+

我的问题是给我身份证fi员工的姓名和总销售额,由员工标识订购fi销售超过70 di的员工的erff不同产品
我写了这个查询

  1. select t1.EmployeeID as Identifier,
  2. concat(t1.FirstName, ' ', t1.LastName) as Name,
  3. (select count(*) from orders t4 where t4.EmployeeID = identifier) as Total_Sales,
  4. count(distinct(t3.ProductID)) as Total_unique_products
  5. from Employees t1
  6. inner join Orders t2
  7. on t1.EmployeeID = t2.EmployeeID
  8. inner join orderdetails t3
  9. on t2.OrderID = t3.OrderID
  10. group by t1.EmployeeID
  11. order by t1.EmployeeID;

我也只想展示那些产品总数大于70的地方;我该怎么做?

zfciruhq

zfciruhq1#

你需要一个 having 条款, concat(t1.FirstName, ' ', t1.LastName) 列添加到 group by 子句,并重新格式化 count(distinct...) 表达式(内圆括号是多余的)。
left join 会是一个更好的选择,因为可能存在不匹配的记录。
不需要相关子查询。把你的换成这个:

  1. select e.EmployeeID as Identifier,
  2. concat(e.FirstName, ' ', e.LastName) as Name,
  3. count(o.ID) as Total_Sales,
  4. count(distinct od.ProductID) as Total_unique_products
  5. from Employees e
  6. left join Orders o
  7. on e.EmployeeID = o.EmployeeID
  8. left join orderdetails od
  9. on o.OrderID = od.OrderID
  10. group by e.EmployeeID, concat(e.FirstName, ' ', e.LastName)
  11. having count(distinct od.ProductID) > 70
  12. order by e.EmployeeID;
vngu2lb8

vngu2lb82#

主要用途 where 要筛选特定员工,还可以使用 having 筛选总产品数大于70的记录

  1. select
  2. t1.EmployeeID as Identifier,
  3. concat(t1.FirstName, ' ', t1.LastName) as Name,
  4. count(t2.OrderID) as Total_Sales,
  5. count(distinct t3.ProductID) as Total_unique_products
  6. from Employees t1
  7. inner join Orders t2 on t1.EmployeeID = t2.EmployeeID
  8. inner join orderdetails t3 on t2.OrderID = t3.OrderID
  9. where t2.EmployeeID = identifier
  10. group by t1.EmployeeID
  11. having count(distinct(t3.ProductID)) >70
  12. order by t1.EmployeeID;

相关问题