mysql - 如何在有条件的 SQL 中选择平均计数
问题描述
我有两张桌子:
-----------------
| Branch |
-----------------
| BCODE | BNAME |
|1 | City1 |
|2 | City2 |
-----------------
-----------------------
| Customer |
-----------------------
| CNO | CNAME | BCODE |
-----------------------
|1 | Cust1 | 1 |
|2 | Cust2 | 1 |
|3 | Cust3 | 2 |
|4 | Cust4 | 2 |
|5 | Cust5 | 2 |
|6 | Cust6 | 2 |
-----------------------
我想要什么:客户数量少于每个分支机构平均客户数量的分支机构列表
我试过的(最接近答案):
SELECT bcode, bname, customers from (
SELECT
branch.BCODE as bcode,
branch.BNAME as bname ,
count(customer.BCODE)as customers,
(select
count(customer.BCODE)/count(distinct customer.BCODE)
from customer) as average
FROM
branch
INNER JOIN
customer
ON
branch.BCODE=customer.BCODE
GROUP BY
branch.BCODE,
branch.BNAME
)
WHERE
average > customers;
我得到了什么:
#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 19 行的“WHERE average > accounts LIMIT 0, 25”附近使用正确的语法
解决方案
问题出现在子查询的末尾,因为您没有别名。
SELECT bcode, bname, customers from (
SELECT
branch.BCODE as bcode,
branch.BNAME as bname ,
count(customer.BCODE)as customers,
(select
count(customer.BCODE)/count(distinct customer.BCODE)
from customer) as average
FROM
branch
INNER JOIN
customer
ON
branch.BCODE=customer.BCODE
GROUP BY
branch.BCODE,
branch.BNAME
) a -- Alias here
WHERE
average > customers;
检查DB<>FIDDLE并注意第 18 行。
推荐阅读
- flutter - List Flutter 操作后重建 ListView
- youtube - YouTube 使用什么算法来改变播放速度而不影响音频音高?
- php - 如何创建从目录中删除多个文件/图像的功能?
- firefox - 获取当前在 Youtube 中播放的视频
- python - 子类化 win32com 对象
- python - 为什么 tkinter 相对于窗口调整大小不成比例地扩展框架?
- bash - ROS 启动文件在 bash 文件中不起作用
- arrays - 在 Swift4 中检查填充的数组
- c++ - 将信息掩码为指针 - C++ (Boost.Intrusive)
- c++ - 我在使用带有类的数组时遇到什么问题?