我试图找出每个数字出现在列中的次数。我有一个数据库,存储父母的密码,用于检查他们的孩子进出幼儿园。
引脚号存储在CHAR(4)
列中;但它们都是数字。
我试过了:
SELECT COUNT(pin) AS Count
FROM adult
WHERE pin LIKE '%2%';
返回以下结果:
+-------+
| Count |
+-------+
| 182 |
+-------+
但这只会告诉我有多少记录有' 2'而不是它发生了多少次(因为记录可能超过1' 2'它'也是一个非常手动的过程来完成每个数字0-9。
我喜欢看起来更像的东西:
+-----+-----+
|Value|Count|
+-----+-----+
| 0| 204|
| 1| 200|
| 2| 182|
. .
. .
. .
| 9| 203|
+-----+-----+
这超出了我对SQL的了解。非常感谢您的帮助!
答案 0 :(得分:0)
您可以使用substr()
:
select substr(t.pin, n.pos, 1) as chr, count(*)
from adult t cross join
(select 1 as pos union all select 2 union all select 3 union all select 4
) n
group by substr(t.pin, n.pos, 1)
order by chr;
这将提取pin
中的每个字符并按字符聚合。 from
子句等同于:
from ((select substr(col, 1, 1) from adult union all
(select substr(col, 2, 1) from adult union all
(select substr(col, 3, 1) from adult union all
(select substr(col, 4, 1) from adult
) t
答案 1 :(得分:0)
你可以尝试这样的事情;表达式只是在替换您的值后查看字符串的长度,然后SUM
所有行都有一个总/列。
SELECT
1 AS Value
,SUM(LENGTH(pin) - LENGTH(replace(pin, '1',''))) AS Count
FROM <your_table>
UNION
SELECT
2 AS Value
,SUM(LENGTH(pin) - LENGTH(replace(pin, '2',''))) AS Count
FROM <your_table>
UNION
SELECT
3 AS Value
,SUM(LENGTH(pin) - LENGTH(replace(pin, '3',''))) AS Count
FROM <your_table>
....
.... and so on
或者您可以使用存储值的变量并迭代0到9之间的值