我有一张桌子,我为每个记录保存他的祖先
+----+------------+
| id | ancestors |
+----+------------+
| 1 | ,1, |
| 2 | ,2, |
| 3 | ,3,1, |
| 4 | ,4,2, |
| 5 | ,5,3,1, |
| 6 | ,6,4,2, |
| 7 | ,7,5,3,1, |
+----+------------+
如何按id
分组,但是这样group by ','id','
而不是group by id
来获得这样的结果:
+----+------------+
| id | count |
+----+------------+
| 1 | 4 |
| 2 | 3 |
| 3 | 3 |
| 4 | 2 |
| 5 | 2 |
| 6 | 1 |
| 7 | 1 |
+----+------------+
我的要求是在id
的整栏中找到ancestors
的计数。
答案 0 :(得分:6)
SELECT
PERSONID
,COALESCE(MAX(CASE WHEN phoneTypeId = '3' THEN SUBSTRING(Phone,1,12) END), '') as 'TYPE1'
,COALESCE(MAX(CASE WHEN phoneTypeId = '2' THEN SUBSTRING(Phone,1,12) END), '') as 'TYPE2'
,COALESCE(MAX(CASE WHEN phoneTypeId = '5' THEN SUBSTRING(Phone,1,12) END), '') as 'TYPE3'
FROM personphone
WHERE len(phone) = 12
GROUP BY personid
order by personid
请注意,它不是一种有效的方法,随着数据库变大,它会变慢。
答案 1 :(得分:1)
您的要求似乎是在count
的整栏中找到id
的{{1}}。
因此,依赖子查询中的使用ancestors
应该没问题,如下所示:
COUNT
使用SQLFiddle here.
更新:修正了两位数或更多数字的问题。 1将仅匹配1.不是10,11等。这是可能的,因为您的列会在每个值附近附加SELECT a.id,
(SELECT count(*) FROM ancestors_table t where t.ancestors LIKE CONCAT('%,',a.id,',%') )
FROM ancestors_table a;
。