2015-09-17 41 views
-2

我有兩個表。一個表是保存大部分信息的主表。它基本上有兩個重要的列:SQL - COUNT()在兩個表中是GROUP BY一列的表

table2_id 
type 

第二個表只有其中一列,那就是id。但是,我必須使用GROUP BY類型,因爲這正是我所需要的。但問題的發生是因爲如果我在加入的語句上使用GROUP BY ID,它不會給我正確的信息。我需要其他表來獲得匹配和第一張表不匹配。

示例表1:

id  type 
100  admin 
101  user 
102  author 
103  editor 
104  customer 

示例表2:

id 
100 
100 
101 
101 
110 
120 
100 
100 

我的結果需要看起來像:

type  total(COUNT()IN TABLE1) intable2andtable1 difference 
admin  200       100    100 
user  120       100     20 
author  205       200     5 
editor  80       70     10 
customer 300       100    200 

所以,我一些如何需要加入和COUNT ()表。我能夠從第一個表中獲得實際總數。但是,如果我嘗試使用ID做任何事情,它會使我將它添加到GROUP BY子句中,這就搞亂了我的結果。

這是我曾嘗試:

SELECT type , count(*) as total 
FROM table1 
GROUP BY type 

,這將返回:

type  total(COUNT()IN TABLE1) 
admin  200 
user  120 
author  205 
editor  80 
customer 300 

但是,我不能得到第二個表參與和向我展示了兩者之間的差異。

編輯:這是一個sqlfiddle使其更清晰。 http://sqlfiddle.com/#!15/08951/2/0

+0

你的願望結果應該是'SUM'而不是'COUNT'?因爲計數是2,並且管理員的總數是200。或者我們需要更多的數據,因爲'用戶數'是多少? –

+2

我想你的table1和table2是不完整的,你的樣本數據和你想要的結果之間沒有邏輯關係。嘗試提供 [** SqlFiddle **](http://sqlfiddle.com/#!15/5368b/6),以便我們可以更好地理解問題並以更快的速度給出答案 ,並請閱讀[**如何問**](http://stackoverflow.com/help/how-to-ask) 和[**如何創建一個最小,完整和可驗證的例子。**](http:// stackoverflow。 com/help/mcve) –

+0

對不起。我以爲我很清楚。這是一個小提琴。希望這會更有意義:http://sqlfiddle.com/#!15/08951/2/0 – Lynx

回答

1

這不是完全清楚你的表1和2之間的公共領域,然而,假設它是id,此查詢應是你追求的:

SELECT type, 
    COUNT(t1.version_id) as t1_total, 
    COUNT(t2.version_id) as t2_total, 
    COUNT(t1.version_id) - COUNT(t2.version_id) as difference 
FROM table1 t1 
    LEFT JOIN table2 t2 ON t1.id = t2.id 
GROUP BY type 
ORDER BY type ASC 

更新SQL小提琴這裏:http://sqlfiddle.com/#!15/08951/20

0

根據我的理解,您想要統計每個類型在表格2中表示的次數,是正確的?這個怎麼樣:

SELECT table1.type, COUNT(table2.id) 
FROM table2 INNER JOIN table1 ON table1.id = table2.id 
GROUP BY table2.id` 

它應該顯示是這樣的:

admin 4 
user 2 
+0

我還需要計算table1中顯示類型的次數。 – Lynx