mysql - 如何计算加入表mysql
问题描述
我有 4 个表加入另一个是通过市场加入的,我需要帮助从每个表中生成总记录,表如下......
councils
------------------------
| council_id | name |
------------------------
| 1 | c1 |
+-------------+--------+
| 1 | c2 |
------------------------
Markets
----------------------------------
| market_id | council_id | name |
+-----------+------------+-------+
| 1 | 1 | wells |
+-----------+------------+-------+
| 2 | 1 | John |
+-----------+------------+-------+
| 3 | 2 | abcd |
----------------------------------
Marketeers
-------------------------------------
| marketeer_id | market_id | name |
+--------------+------------+-------+
| 1 | 2 | a |
+--------------+------------+-------+
| 2 | 3 | b |
+--------------+------------+-------+
| 3 | 1 | c |
-------------------------------------
Stations
----------------------------------
| station_id | council_id | name |
+------------+------------+-------+
| 1 | 1 | x |
+------------+------------+-------+
| 2 | 2 | y |
+------------+------------+-------+
| 3 | 2 | z |
-----------------------------------
SELECT
c.council_name,
COUNT(DISTINCT market_id) AS num_markets,
COUNT(DISTINCT station_id) AS num_stations,
COALESCE(t2.cnt, 0) AS num_markteers
FROM markets m
JOIN councils c ON m.council_id = c.council_id
LEFT JOIN stations s ON s.council_id = c.council_id
LEFT JOIN (
SELECT m2.council_id, COUNT(DISTINCT marketeer_id) AS cnt
FROM marketeers p
JOIN markets m2 ON m2.market_id= p.market_id
GROUP BY m2.council_id
)t2 USING (c.council_id)
GROUP BY c.council_id;
错误:查询中的错误 (1064):第 10 行的“.council_id) GROUP BY c.council_id”附近的语法错误
预期结果
-------------------------------------------------------------
| council_name | num_markets | num_stations | num_markteers |
-------------------------------------------------------------
| c1 | 2 | 1 | 2 |
-------------------------------------------------------------
| c2 | 1 | 2 | 1 |
-------------------------------------------------------------
解决方案
你可以试试下面的 -
SELECT c.council_name,
COUNT(DISTINCT market_id) AS num_markets,
COUNT(DISTINCT station_id) AS num_stations,
COUNT(DISTINCT marketeer_id) AS num_markteers
FROM councils c
join markets m ON m.council_id = c.council_id
left join Marketeers m2 m2.market_id= m.market_id
LEFT JOIN stations s ON s.council_id = c.council_id
GROUP BY m2.council_id,c.council_name
推荐阅读
- php - 如何创建尽可能多的动态El,就像我们从 PHP 收到的一样
- python - 更新列表内的列表也会影响其他子列表,有人可以解释这种行为吗?
- javascript - 取消绑定 Vue 指令生命周期中的窗口事件侦听器
- unit-testing - 如何为单元测试存根 Vue 组件方法
- python-2.7 - 为 python 2.7 安装依赖项
- batch-file - 如何存储 txt 文件中列出的远程服务器的 Windows 操作系统名称
- python - 变量对渐变具有“无”
- elasticsearch - 每个索引的非嵌套文档数
- php - 如何从json中获取数据?
- javascript - 使用 PHP 填充 Javascript 变量