2017-04-18 51 views
-3

我創建了名爲'group_test'的MariaDB(10.1.21)表,並保存了一些數據,如下所示。使用GROUP BY和COUNT的SQL

Group Item Value1 Value2 Value3 
A  a1  1  0  0 
A  a2  1  1  1 
A  a3  1  1  2 
B  b1  1  1  0 
B  b2  1  1  1 
B  b3  1  0  0 
B  b4  1  1  3 
C  c1  1  1  0 
C  c2  1  1  1 

使用查詢,我想一次做出如下結果。

Group Items Value1_1 Value2_1 Value3_1 
A  3  3   2   1 
B  4  4   3   1 
C  2  2   2   1 

項目表示'組'中'項目'的總數。
ValueN_1表示'GroupN'中'ValueN'值的總數等於1。

我想我會使用GROUP BY和COUNT,但我不知道該怎麼辦。
如何編寫SQL以在一個查詢中獲得上述結果?

謝謝。

回答

1

只需做一個GROUP BY。由於值1到值3僅爲0和1,因此可以使用SUM()來計數1。

select Group, count(Item), sum(Value1), sum(Value2), sum(Value3) 
from tablename 
group by Group 

編輯:值N可以具有從0至4值」:

select Group, 
     count(Item), 
     sum(case when Value1 = 1 then 1 else 0 end) Value1_1, 
     sum(case when Value2 = 1 then 1 else 0 end) Value2_1, 
     sum(case when Value3 = 1 then 1 else 0 end) Value3_1 
from tablename 
group by Group 
+0

我真的很抱歉使用case BY子句SUM聚合函數。 ValueN可以有一個從0到4的值。我只想計數值= 1。 – Eric

+0

它運作良好。感謝你的快速回復。 – Eric

0

假設value1value2value3只能是0或1,則可以把它寫像這樣

select Group, 
     count(*) as Items, 
     sum(value1) as Value1_1, 
     sum(value2) as Value2_1, 
     sum(value3) as Value3_1 
from yourTable t1 
group by Group 

如果不是這樣的話,你會已經在sum

select Group, 
     count(*) as Items, 
     sum(case when value1 = 1 then 1 else 0 end) as Value1_1, 
     sum(case when value2 = 1 then 1 else 0 end) as Value2_1, 
     sum(case when value3 = 1 then 1 else 0 end) as Value3_1 
from yourTable t1 
group by Group 
0

使用GROUP SELECT語句

SELECT * 
FROM 
(
    SELECT [Group], count(Item) Item, sum(Value1) Value1, sum(Value2) Value2, 
     sum(Value3) Value3 
    FROM Your_tableName 
    GROUP BY [Group] 
) A