mysql - 计算 2 个表的相等字段,并与第 3 个表进行内部连接

标签 mysql sql inner-join

我有3张 table

Table cases: docket is pk 
| docket |   dt_file  |
-----------------------
|AA-0322 | 01-22-2015 |
|AA-0431 | 03-21-2014 |


Table parties:
|  id  |  docket  |  name  |
----------------------------
|   1  |  AA-0322 |  Bob   |
|   2  |  AA-0322 |  John  |


Table motions:
|  id  |  docket  |  motion |
-----------------------------
|  1   | AA-0322  |  Summons|
|  2   | AA-0322  |  Guilty |

我想计算具有相同摘要的政党和动议中的字段数,然后用 table.cases 和 dt_file 制作一个表格

例子:

| docket | party_count | motion_count| dt_file |
 -----------------------------------------------
  AA-0322|       2     |        2    | 02-22-2015|

我也想通过dt_file过滤,所以添加一个WHERE语句ex:

WHERE YEAR(dt_file) = '2015'

到目前为止,我已经想到了这个,但是我没有成功地将 table.cases 与 dt_file 正确地连接起来。

SELECT p.docket, p.party_count, m.motion_count
FROM
    (SELECT docket, COUNT(docket) AS party_count
     FROM parties
     GROUP BY docket) AS p
INNER JOIN
    (SELECT docket, COUNT(docket) AS motion_count
     FROM motions
     GROUP BY docket) AS m
ON p.docket = m.docket

最佳答案

您的查询似乎是正确的。您只需要将 cases 添加到 from 子句:

SELECT c.docket, p.party_count, m.motion_count, c.dt_file
FROM cases c JOIN
     (SELECT docket, COUNT(docket) AS party_count
      FROM parties
      GROUP BY docket
     ) p
     ON c.docket = p.docket INNER JOIN
     (SELECT docket, COUNT(docket) AS motion_count
      FROM motions
      GROUP BY docket
     ) m
     ON c.docket = m.docket;

如果您想要所有的摘要,即使是那些没有议案或派对的摘要,那么使用 LEFT JOIN

关于mysql - 计算 2 个表的相等字段,并与第 3 个表进行内部连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953561/

相关文章:

php foreach循环只返回数组中第一次迭代的值

python - 让django ORM准备sql,而不执行

mysql - SQL 2内部加入其他数据结果

php - Pivot MySQL - 如何将数据从一个表移动到一个新表

php - 具有关系的嵌套映射 Laravel 查询

c# - C# 列表上的动态 SQL 查询(基于字符串)

mysql - 加入同一张 table

Mysql 内部连接两次并在两次连接上使用 WHERE

php - 如果另一张表中不存在记录,则插入到一张表中

php - 在一天中的特定时间禁用项目php