2015-07-20 71 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

相關問題