2017-09-14 49 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 
相关问题