2015-07-20 217 views
1

我想在合并两个表格时获得犯下的罪行总数。 但我想计算每个犯罪提交的数字,并显示那些没有被提交的值为0,我怎样才能实现这一点使用MySQL? 我的代码:如何合并两个表并将它们的值计为一个?

SELECT count(offense_id) 
    AS totalnumber,(
    select offense_description 
    from offense 
    where offense.offense_id = case_crime.offense_id 
    )as crimeName 
    from case_crime 
    group by offense_id 

case_crime table

offense table

output but i also want to display offense_description that no crime being committed

+0

我也想显示其他未提交的犯罪数量,并显示0这些values.Any帮助将不胜感激。谢谢。 –

+0

请!不要发布图片。给我们一些数据来处理。另外,请解释这些表格及其关系。 –

+0

第一张图片是case_crime表格,第二张图片是进攻表格,我想结合case_crime表格和进攻表格并计算每个进攻表格的值。我也想要显示的是“进击的描述”的值为0. –

回答

0

你正在寻找一个LEFT OUTER JOIN

喜欢的东西

SELECT offense.offense_id 
    , offense_description 
    , count(case_crime.case_id) as Total_Number 

from offense 
LEFT OUTER JOIN case_crime ON offense.offense_id = case_crime.offense_id 
group by offense.offense_id 

我承认,我是一个TSQL的家伙,所以我会处理好COUNT(*)返回null,当有使用该罪行没有的情况:ISNULL(COUNT(case_crime),0)

其他SQL变种可能会使用COALESCE(COUNT(case_crime), 0)

+0

谢谢Stan bu我得到了一个isnull的错误:#1582 - 调用本地函数'ISNULL'时的错误参数计数 –

+0

这就是我的TSQL根。如果左连接没有任何内容,则左连接的COUNT(*)将返回NULL,因此您需要使用适当的函数将NULL转换为零。我调整了答案 – Stan

+0

是的它的工作,但输出显示全部1.我想要的是,case_crime表中的attack_description将有一个输出为1,我想结合未列入case_crime的attack_description并显示值为0,因为没有犯罪行为。 –

0

要获取的所有犯罪清单和注册罪的数量,你需要使用....两个表之间的LEFT JOIN这样的SQL:

SELECT a.offense_id, a.offense_description, count(b.crime_caseid) as total 
FROM offense a LEFT JOIN case_crime b 
ON a.offense_id = b.offense_id 
group by a.offense_id; 

Here is a SQLFiddle玩弄:)

+0

感谢它的工作在小提琴上,但在我的phpadmin它不工作我得到了错误:'字段列表'中的未知列'b.crime_caseid'。再次感谢。 –

+0

对不起 - 我在我的小提琴中输入了错误的表名。我编辑了答案来纠正这个问题。还有一次,你应该转储SQL来创建表或者在小提琴中为我们做呢? :) – citywall