2017-09-14 48 views
-1

我有表kondisi這樣在一個單列的計數與組相同的ID

+------------+----------------+ 
| id_kondisi | id_sub_kondisi | 
+------------+----------------+ 
| 01   | 0102   | 
| 03   | 0302   | 
| 01   | 0101   | 
| 01   | 0102   | 
| 01   | 0101   | 
| 03   | 0301   | 
| 03   | 0303   | 
| 02   | 0202   | 
| 01   | 0102   | 
| 03   | 0301   | 
| 01   | 0101   | 
| 02   | 0203   | 
| 03   | 0302   | 
| 02   | 0202   | 
| 02   | 0201   | 
| 02   | 0202   | 
+------------+----------------+ 
16 rows in set (0.00 sec) 

我想,看起來像這樣

+----------------+-------------+ 
| kondisi_tot | coun_tot | 
+----------------+-------------+ 
| 01    | 6   | 
| 0101   | 3   | 
| 0102   | 3   | 
| 02    | 5   | 
| 0201   | 1   | 
| 0202   | 3   | 
| 0203   | 1   | 
| 03    | 5   | 
| 0301   | 2   | 
| 0302   | 2   | 
| 0303   | 1   | 
+----------------+-------------+ 

所以表的結果,我需要統計已經循環的數據ID。就像上面的結果 我知道我必須使用group by但我如何使另一列成一列?

PS:我id_kondisi和id_sub_kondisi是char類型,而不是整型

回答

1

像這樣的東西應該工作。請注意,UNION ALL用於確保計算所有值;然後將ID值輸出到CHAR以使排序順序有效。

SQL Fiddle

的MySQL 5.6架構設置

CREATE TABLE kondisi 
    (`id_kondisi` int, `id_sub_kondisi` int) 
; 

INSERT INTO kondisi 
    (`id_kondisi`, `id_sub_kondisi`) 
VALUES 
    (01, 0102), 
    (03, 0302), 
    (01, 0101), 
    (01, 0102), 
    (01, 0101), 
    (03, 0301), 
    (03, 0303), 
    (02, 0202), 
    (01, 0102), 
    (03, 0301), 
    (01, 0101), 
    (02, 0203), 
    (03, 0302), 
    (02, 0202), 
    (02, 0201), 
    (02, 0202) 
; 

查詢1

select id, count(id) 
from 
(select id_kondisi as id from kondisi 
union all 
select id_sub_kondisi from kondisi) merged_table 
group by id 
order by cast(id as char) 

Results

| id | count(id) | 
    |-----|-----------| 
    | 1 |   6 | 
    | 101 |   3 | 
    | 102 |   3 | 
    | 2 |   5 | 
    | 201 |   1 | 
    | 202 |   3 | 
    | 203 |   1 | 
    | 3 |   5 | 
    | 301 |   2 | 
    | 302 |   2 | 
    | 303 |   1 | 
+0

我的壞。我的ID是一個字符類型,而不是int,我剛剛編輯我的問題。如果數據類型是char類型,有沒有辦法? – Gagantous

2
SELECT ID, COUNT(*) FROM (
    SELECT id_kondisi as ID FROM kondisi 
    UNION ALL 
    SELECT id_sub_kondisi as ID FROM kondisi 
) sub 
GROUP BY ID 
ORDER BY ID 

可以有事情做與訂購的原因有一個ID爲數字02將小於0102也許你需要在「order by」語句中將ID轉換爲字符串。

+0

是,我有類似「varchar」 – Gagantous

+0

的東西,我想通過'kondisi_tot' asc命令,而id是achar/varchar類型 – Gagantous

+0

爲什麼它不算什麼?它只是返回到「1」爲每行結果計數(*),但確實是它的兩列合併成一列只有 – Gagantous

1

你需要使用UNION到結果集這兩列的結合:

繼UNION查詢retuns兩列結果:

SELECT usr_user_type_removed as id from user UNION ALL select usr_status from user 

完整的查詢:

SELECT id, COUNT(id) FROM 
(SELECT usr_user_type_removed as id from user UNION ALL select usr_status from user) n_table 
group by id 
相關問題