SQL中的思想实验

时间:2014-04-03 12:17:51

标签: sql sql-server database

我希望显示SQL数据库中表格中每个不同元素的出现次数,以及新输出表格中特定的不同元素。是否有可能在一次声明中手动撞击我的头?

2 个答案:

答案 0 :(得分:1)

如果没有真正尝试过,那怎么样:

SELECT tmp.Field, (SELECT COUNT(*) FROM [Table] t WHERE t.DesiredField = tmp.Field) AS Count
FROM
(
    SELECT DISTINCT DesiredField FROM [Table]
) tmp

首先从[表格]中选择所有不同的值,然后在外部选择中,选择它们在列中出现的值和次数。

您也可以尝试

SELECT Field, SUM(1) AS Count FROM Table
GROUP BY Field

这应该"压扁"该表使其仅包含Field中的不同值以及Field具有相同值的行数。


我刚试过第二次 - 看起来效果很好。


原来我一直都错了。第二个例子和下面的例子实际上返回了相同的结果:

SELECT Field, COUNT(*) AS Count FROM Table
GROUP BY Field

答案 1 :(得分:1)

最简单的方法就是使用COUNT()。您将看到计数参数的变化,因此这里有选项。

DECLARE @tbl TABLE(id INT, data INT)
INSERT INTO @tbl VALUES (1,1),(2,1),(3,2),(4,NULL)

SELECT data
      ,COUNT(*) Count_star
      ,COUNT(id) Count_id
      ,COUNT(data) Count_data
      ,COUNT(1) Count_literal
  FROM @tbl
 GROUP BY data

data        Count_star  Count_id    Count_data  Count_literal
----------- ----------- ----------- ----------- -------------
NULL        1           1           0           1
1           2           2           2           2
2           1           1           1           1
Warning: Null value is eliminated by an aggregate or other SET operation.

如果你COUNT一个包含NULL的字段,你会看到与NULL处理的区别。