用两个表进行数据操作

时间:2019-02-21 13:42:18

标签: mysql sql count jointable

对不起,标题太模糊了,老实说,我不知道如何准确地提出我的问题。在编写两个表的查询时,我需要一些帮助。

这些表分别命名为 subject assignment ,它们看起来像这样:

主题

subjectcode | subjectname         | classcode
---------------------------------------------
BAC3000     | Bachelorassignment  | IS3
DAT1000     | Databasetechonlogy  | IS1
INF1000     | Informationsystems  | IS1
LED2000     | IT-leadership       | IS2
OBJ2000     | OOP                 | IS2
PRG3000     | Applied programming | IS3

分配

subjectcode | number | deadline
-------------------------------------
DAT1000     | 1      | 2020-10-20
DAT1000     | 2      |
INF1000     | 1      | 2020-10-30
INF1000     | 2      | 

我需要编写一个查询,该查询输出该主题的所有主题代码和作业数量。输出应如下所示:

subjectcode | numberofassignment
--------------------------------
BAC3000     | 0  
DAT1000     | 2  
INF1000     | 2  
LED2000     | 0       
OBJ2000     | 0               
PRG3000     | 0 

我尝试过以不同方式创建视图,联接表并使用count,但是没有成功。任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:2)

只需使用count()并退出联接

   select s.subjectcode ,count(number) as numberofassignment from
   Subject s left join Assignment a 
   on s.subjectcode=a.subjectcode 
   group by s.subjectcode 

答案 1 :(得分:0)

我不确定我是否正确,但是当您要计算对主题代码的攻击次数时,可以使用此语句。为此,您不需要join,而可以使用子查询。

select 
 subjectcode,
 (select count(*) from Assignment where subjectcode = s.subjectcode) as numberofassignment
from 
 Subject s

答案 2 :(得分:0)

使用您提供的数据,结果看起来不可能完全一样。但是根据您的要求,可以执行以下操作:

c = {18: [2773], 57: [87], 98: [34], 135: [5], 140: [56, 2151, 2194, 2101, 2049, 2298, 2244, 2004], 167: [2343], 236: [2752], 245: [636, 2290, 2241, 2194, 2146, 2098, 2050, 2001, 2337, 1952, 1905, 1857, 1809, 1760, 1713, 1661, 1614], 256: [1717, 1564, 1522], 284: [2773], 303: [2744, 1842, 560, 945, 1026, 975, 875, 854, 833, 783, 1093], 344: [1601, 1477, 1440, 1384, 1362, 1327, 1298, 1237, 1203, 1181, 1130, 972, 924, 880, 787, 1067, 1019, 834, 1299, 1160, 1114], 416: [1253, 1207, 555, 491, 459, 522, 2130, 2092, 1791, 1752, 1589, 2243, 2206, 2168, 2053, 1870, 1831, 1713, 1635, 1513, 1476], 492: [2358, 2321, 2283, 1673, 1551, 2046, 1981, 1956], 570: [2137, 2111, 2073, 2019, 1922], 619: [535], 621: [684, 979, 1110, 613, 2060], 626: [1774, 1824, 1771, 1721], 691: [1926, 1902, 1849, 1798, 1746, 1694], 700: [2743, 421, 650, 602, 556, 510, 466, 746, 697], 896: [1160, 524, 479, 435], 899: [760, 717, 665, 615, 568], 925: [1273], 932: [1087], 936: [1127, 700, 604, 558], 965: [2775, 747, 649]}

答案 3 :(得分:0)

这将在MySQL中工作:

select subjectcode, (select count(*) from Assignment where subjectcode=s.subjectcode)  
from Subject s