SQL中的思维实验
我想显示SQL数据库表中列中的每个不同元素与新输出表中的特定不同元素一起出现的次数。有没有可能在一句话中用手将我的头撞到它上面?没有实际尝试过,这个怎么样:SQL中的思维实验,sql,sql-server,database,Sql,Sql Server,Database,我想显示SQL数据库表中列中的每个不同元素与新输出表中的特定不同元素一起出现的次数。有没有可能在一句话中用手将我的头撞到它上面?没有实际尝试过,这个怎么样: SELECT tmp.Field, (SELECT COUNT(*) FROM [Table] t WHERE t.DesiredField = tmp.Field) AS Count FROM ( SELECT DISTINCT DesiredField FROM [Table] ) tmp 这将首先从[表]中选择所有不同的值,
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
这将“展平”表格,使其仅包含字段中的不同值以及字段中具有相同值的行数
我刚试了第二种——似乎效果不错
结果证明我一直都错了。第二个示例和以下示例实际返回相同的结果:
SELECT Field, COUNT(*) AS Count FROM Table
GROUP BY Field
最简单的方法就是使用COUNT()。您将看到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.
如果对包含NULL的字段进行计数,您将看到NULL处理的不同之处 显示表结构,以及您迄今为止尝试过的内容。您使用的RDBMS是什么,例如SQL Server、Oracle等@ChrisProsser SQL Server一些示例数据和您期望的结果可能会给我们提供有关您实际谈论的内容的线索。您是否需要Group By子句?是的,第二个正是我想要的。非常感谢。sum(1)是做什么的呢?你可以想象如下:想象一个表包含两列,行数和原始表一样多。名为Field
的第一列包含与原始表相同的值(不区分!),第二列包含编号1
。然后,对于字段
列中包含相同值的所有行,将所有这些1
s相加,只剩下一行包含字段值和总和。这比明显的计数(*)好多少@迪恩:好的,我得纠正我自己。似乎COUNT(*)
会产生相同的结果。我会改变我的答案。