一个有趣的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下调试通过。

时间: 2024-10-28 13:31:02

一个有趣的SQL问题。的相关文章

一个有趣的SQL命题 用一条语句切换BIT型的真假值_MsSql

当然,第一反应是用存储过程.判断原来这个字段值,然后UPDATE. 网上粗粗找了一下没找到方案.自己一动手,居然有个很有趣的结果,连WHERE都不用 对数据库的BIT型赋值,用SQL语句来操作和用管理界面输入不同.管理界面输入必须用TRUE或FALSE来填写.而SQL语句则用0或1 于是乎,先尝试: 复制代码 代码如下: updat t set b=b+1 where id=1; select b from t where id=1; b字段一直保持1 那么用减号呢 复制代码 代码如下: upd

一个有趣的SQL命题 用一条语句切换BIT型的真假值

当然,第一反应是用存储过程.判断原来这个字段值,然后UPDATE. 网上粗粗找了一下没找到方案.自己一动手,居然有个很有趣的结果,连WHERE都不用 对数据库的BIT型赋值,用SQL语句来操作和用管理界面输入不同.管理界面输入必须用TRUE或FALSE来填写.而SQL语句则用0或1 于是乎,先尝试: 复制代码 代码如下: updat t set b=b+1 where id=1; select b from t where id=1; b字段一直保持1 那么用减号呢 复制代码 代码如下: upd

一个有趣的排序题,类似acm

问题描述 一个有趣的排序题,类似acm 求大神解决!! 解决方案 排序就可以了http://zhidao.baidu.com/question/433177615.html?fr=iks&word=%C3%BF%B8%F6%D3%CE%CF%B7%D5%DF%B1%BB%B7%D6%C5%E4%B5%BD%D2%BB%D7%E9%B7%C7%B8%BA%D5%FB%CA%FD%2C%D3%CE%CF%B7%D5%DF%BF%C9%D2%D4%BD%AB%D5%E2%D0%A9%CA%FD%C5%

ORACLE FLASHBACK TABLE 的一个有趣问题

大家都知道ORACLE 10G新增了FLASHBACK特性,其中FLASHBACK TABLE用来对误删的表进行修复.但是今天却发现了FLASHBACK TABLE的一个有趣问题,请看下面慢慢道来:下面我用一个例子来说明我的遇到的有趣的问题,欢迎大家探讨. SQL> CONNECT SYSDBA/***** AS SYSDBA 已连接. SQL> CREATE TABLE TEST (T VARCHAR2(10) ) ; 表已创建. SQL> DROP TABLE TEST; 表已删除.

三大关系数据库字段值超长的一个有趣对比

三大关系数据库字段值超长的一个有趣对比   在开发中,我们可能会遇到插入字段值超长的情况,前阵子遇到这样一个案例,结果一对比后发现一个有趣的现象,如果插入字段值超长,ORACLE.SQL Server.MySQL它们会提示那个字段值超长吗?下面看看实验吧:   ORACLE数据库   SQL> create table test(id number(10), name varchar2(12));   Table created.   SQL> insert into test   2  se

解决一个.NET联接SQL的问题 yiyang(转贴)

解决一个.NET联接SQL的问题    yiyang(转贴)    关键字     .NET   出处     http://Ouynagouyang    Imports System.DataImports System.Data.SqlClientImports System.Data.SqlClient.SqlExceptionPublic Class connect    Private s As String    Private s1 As String    Public Con

win8系统电脑如何设置一个有趣的QQ标签

  win8系统电脑如何设置一个有趣的QQ标签          具体步骤: 1.打开QQ,点击自己的头像; 2.在QQ资料中点击"标签"选卡; 3.在下面输入想要设置的标签名点击"贴上"即可; 4.同时在标签选卡页中,我们把鼠标移动到不喜欢的标签上,点击"X"就可以删除了.

写一个解析函数:SQL布尔表达式的求值

问题描述 写一个解析函数:SQL布尔表达式的求值 编写条件语句解析方法: 已知一个单条件判断方式:boolean compareItem(String fieldName, String operation, String operValue): 实现一个SQL解析函数,要求: 支持and.or: 支持括号: 支持引号: 字段名使用前缀$标识. 输入语句如:($size >= 500 and ($type != "类 型 12 3" or 0 <= $checked)) 其

firebug的一个有趣现象介绍_javascript技巧

复制代码 代码如下: var obj = {length:0,splice:function(){}} console.log(obj) 猜猜上面会打印出啥? 没错,打印出来的看起来是一个空数组... 在FIREBUG里如果一个对象同时拥有length属性和splice方法,就会被firebug显示为数组的形式... 如果以前注意过的话就会发现JQUERY就是这么写的,通过选择器打印出来的看起来跟数组一样. 一直以来我都很好奇为毛返回的数组,但是却有数组根本没有的方法,也没有数组该有的方法,比如