一个有趣的SQL问题。

有朋友近来要我帮忙解决一个问题,问题描述:

有表,表有 3 个字段: f1,f2,f3, 其中,每个字段中都可能出现 1~9 之间的 9 个数字,现要统计出整个表中 1~9 各出现的次数。

如:

F1

|

F2

|

F3

---|---|---

1

|

1

|

2

1

|

2

|

3

2

|

1

|

2

在上例中: ”1” 出现了 4 次, ”2” 出现了 4 次, ”3” 出现了 1 次。

当然,这个问题是要求尽可能的用 SQL 语句来搞定。因为如果用程序,用变量、数组之类,好象就没有提出这个问题的必要。当俺花了几分钟的心思, OVER 之后,感觉到用 SQL 来考虑这个问题,好象就有了点意思,怎样用最简单明了的思路和方法将这个问题搞定?在此将这个问题和大家分享,希望能让大家工作、忙碌之余,换换心境,能换来一点小小的乐趣。

在此将我的解决方法公布如下:

SELECT A1, COUNT(A1) AS Expr1

FROM (SELECT A1 FROM TEST

UNION ALL

SELECT A2 FROM TEST

UNION ALL

SELECT A3 FROM TEST

)

GROUP BY A1

我是故意将字体颜色设置为白色,是为避免干扰您的思维,如果你想看,可用鼠标拖动,选择上面那块空白区域,将内容粘贴到写字板或查询分析器中即可。该 SQL 在 SQLSERVER2000 下调试通过。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus