Sql server 如何使用T-SQL确定SQL Server列中的数据分布

Sql server 如何使用T-SQL确定SQL Server列中的数据分布,sql-server,tsql,Sql Server,Tsql,有人能告诉我如何用T-SQL编译代码,让我可以查看数据在列中的分布情况吗 例如,在示例表中,有一列名为model。在该列中,50%的值是节日。我想创建一个查询,帮助确定列中数据的分布 我提供了一些示例代码来帮助您: CREATE TABLE #tmpTable ( registration varchar(50), make varchar(50), model varchar(50), engine_size float ) INSERT I

有人能告诉我如何用T-SQL编译代码,让我可以查看数据在列中的分布情况吗

例如,在示例表中,有一列名为
model
。在该列中,50%的值是节日。我想创建一个查询,帮助确定列中数据的分布

我提供了一些示例代码来帮助您:

CREATE TABLE #tmpTable 
(
     registration varchar(50),
     make varchar(50),
     model varchar(50),
     engine_size float
)
    
INSERT INTO #tmpTable VALUES
 ('JjFw5a0','SKODA','OCTAVIA',1.8),
 ('VkfCDpZ','FORD','FIESTA',1.7),
 ('5E93ZEq','SKODA','OCTAVIA',1.3),
 ('L2PPN0m','FORD','FIESTA',1.1),
 ('9xKghxp','FORD','FIESTA',1.5),
 ('WHShdBm','FORD','FIESTA',1.4),
 ('TNRHyy7','NISSAN','QASHQAI',1.2),
 ('6RNX0XG','SKODA','OCTAVIA',1.4),
 ('tJ9bOD8','FORD','FIESTA',1.1),
 ('ablFUSC','FORD','FIESTA',1),
 ('4B7RLYL','MERCEDED_BENZ','E CLASS',1.3),
 ('tlJiwVY','FORD','FIESTA',1),
 ('Fb9lcvG','FORD','FIESTA',1.4),
 ('nW4lqBC','FORD','FIESTA',1.6),
 ('LggTmL5','HYUNDAI','I20',1),
 ('2mGgSjS','FORD','FIESTA',1.1),
 ('IDvOzcM','FORD','FIESTA',1.3),
 ('JefpXK2','FORD','FIESTA',1.5),
 ('0h1uWfZ','MERCEDED_BENZ','E CLASS',1.4),
 ('ylBoGbV','MERCEDED_BENZ','E CLASS',1.7),
 ('XzoILDK','VAUXHALL','CORSA',1.8),
 ('Xhocs1Z','FORD','FIESTA',1.5),
 ('Lh2yWGa','KIA','RIO',1.5),
 ('hM5GWA0','FORD','FIESTA',1.3),
 ('PbpxkFt','FORD','FIESTA',1.7),
 ('SDHWV2r','FORD','FIESTA',1.2),
 ('n83Je2D','FORD','FIESTA',1.8),
 ('sDN0gex','FORD','FIESTA',1.2),
 ('7EICOZY','KIA','RIO',1.5),
 ('PUuMmIH','FORD','FIESTA',1),
 ('HiBwSg2','FORD','FIESTA',1.8),
 ('1yk1vDm','KIA','RIO',1.7),
 ('cMpH72R','HYUNDAI','I20',1.1),
 ('ZgQL0gt','MERCEDED_BENZ','E CLASS',1.3),
 ('jhpamQG','KIA','RIO',1.1),
 ('pk0lU2F','VAUXHALL','CORSA',1.4),
 ('fDCUeq1','FORD','FIESTA',1.1),
 ('ono5QFC','FORD','FIESTA',1.7),
 ('VohWwGR','FORD','FIESTA',1.5),
 ('Hih8dKc','SUZUKI','SWIFT',1.2),
 ('D2RNn3h','SUZUKI','SWIFT',1.2),
 ('QaYQulE','FORD','FIESTA',1.1),
 ('xmQPxAG','FORD','FIESTA',1.8),
 ('vmTqkTO','FORD','FIESTA',1.2),
 ('lvUtVUA','MERCEDED_BENZ','E CLASS',1),
 ('SFoj00d','FORD','FIESTA',1),
 ('9S6wrWV','MERCEDED_BENZ','E CLASS',1),
 ('0SBnW0z','FORD','FIESTA',1.1),
 ('HnDHdfj','MERCEDED_BENZ','E CLASS',1),
 ('RV7q947','FORD','FIESTA',1.4),
 ('JZqCtTg','FORD','FIESTA',1.7),
 ('XVgBwgi','FORD','FIESTA',1.8),
 ('iqJDsIF','FORD','FIESTA',1.6),
 ('CMbpRFa','FORD','FIESTA',1.6),
 ('vF7K5Xg','SUZUKI','SWIFT',1.1),
 ('3j6XGDH','FORD','FIESTA',1.5),
 ('ommqugM','FORD','FIESTA',1.1),
 ('LMQkPnw','NISSAN','QASHQAI',1.4),
 ('1dKgcdd','FORD','FIESTA',1.5),
 ('hC8BxiP','MERCEDED_BENZ','E CLASS',1.1),
 ('wLTWol7','FORD','FIESTA',1.6),
 ('TY8ChYN','FORD','FIESTA',1.6),
 ('Gw1CpI8','FORD','FIESTA',1.4),
 ('L4OPAJq','FORD','FIESTA',1.1),
 ('6TyYpfi','NISSAN','QASHQAI',1.6),
 ('ozoOcGL','FORD','FIESTA',1.4),
 ('6IME19U','FORD','FIESTA',1.4),
 ('BxpmJO5','FORD','FIESTA',1.4),
 ('0zc2n5A','FORD','FIESTA',1.3),
 ('FqbBZE2','FIAT','500',1.7),
 ('2EkTOTz','FORD','FIESTA',1.4),
 ('fNBvIvg','MERCEDED_BENZ','E CLASS',1.2),
 ('u5j4R4S','KIA','RIO',1.4),
 ('zpWaUZo','FORD','FIESTA',1.1),
 ('FQPVQYc','NISSAN','QASHQAI',1.7),
 ('8RBQADq','KIA','RIO',1.7),
 ('TOz2bcT','HYUNDAI','I20',1.7),
 ('jebhCex','FORD','FIESTA',1.3),
 ('cdHA1gL','FORD','FIESTA',1.2),
 ('FoaN4AT','FORD','FIESTA',1.7),
 ('atGn288','FORD','FIESTA',1.5),
 ('es8VNdW','FIAT','500',1.3),
 ('hDWoMXa','KIA','RIO',1.4),
 ('Q9C6Br1','KIA','RIO',1.5),
 ('mFSy4aF','FORD','FIESTA',1.6),
 ('bbbKnrM','SKODA','OCTAVIA',1.5),
 ('qY7lz6I','FORD','FIESTA',1),
 ('8Ch2OeU','VAUXHALL','CORSA',1.3),
 ('dcWsjJv','VAUXHALL','CORSA',1.3),
 ('bnnoBPg','SKODA','OCTAVIA',1.8),
 ('mvDyYkK','FORD','FIESTA',1.4),
 ('KpWDYap','FORD','FIESTA',1.3),
 ('7EK9K4z','FORD','FIESTA',1.3),
 ('ZPLHtlP','FORD','FIESTA',1.6),
 ('4EpYeSB','FORD','FIESTA',1.6),
 ('O1eZ20M','FORD','FIESTA',1),
 ('WfVntKk','FORD','FIESTA',1.7),
 ('6VlkBdi','FORD','FIESTA',1.1),
 ('hFQfKjk','KIA','RIO',1.4),
 ('3Y4njNP','KIA','RIO',1),
 ('3UuNqG0','FORD','FIESTA',1.7),
 ('qpvMYAu','FORD','FIESTA',1.1),
 ('NCYJUqx','FORD','FIESTA',1.3),
 ('M0AvWzg','FORD','FIESTA',1.6),
 ('XbVmtFf','FORD','FIESTA',1.3),
 ('l8qZy0H','SKODA','OCTAVIA',1.3),
 ('EDUbxaU','MERCEDED_BENZ','E CLASS',1.6),
 ('nWLd82o','FORD','FIESTA',1.7),
 ('4AkoyWx','FORD','FIESTA',1),
 ('nOoO25v','FORD','FIESTA',1.3),
 ('VAm5aV8','NISSAN','QASHQAI',1.4),
 ('zbd3cie','FORD','FIESTA',1.5),
 ('hyAN71W','NISSAN','QASHQAI',1),
 ('FxACHDf','FIAT','500',1.7),
 ('wOZdaeV','FORD','FIESTA',1.6),
 ('gfxZl99','VAUXHALL','CORSA',1.1),
 ('06HhwEJ','SKODA','OCTAVIA',1.7),
 ('PCTgYiG','KIA','RIO',1.7),
 ('U54WXZQ','KIA','RIO',1.6),
 ('FHgrRiF','FORD','FIESTA',1.6),
 ('R3jP73p','SKODA','OCTAVIA',1.5),
 ('etVPKX9','SUZUKI','SWIFT',1.1),
 ('BE3yReB','FORD','FIESTA',1.7),
 ('zXmX878','FORD','FIESTA',1.6),
 ('wdM3P2m','FORD','FIESTA',1.7),
 ('tb727BM','FORD','FIESTA',1.1)
    
 SELECT * FROM #tmpTable

您可以使用条件聚合来获取福特嘉年华的计数与总计数的比率

SELECT 100.0
       * count(CASE
                WHEN make = 'FORD'
                     AND model = 'FIESTA' THEN
                  1
              END)
       / count(*)
       FROM #tmptable;

编辑:

如果您想要所有车型的数字,您可以简单地聚合和分组以获得每个车型的计数,并将其除以可通过子查询获得的总计数

SELECT make,
       model,
       100.0
       * count(*)
       / (SELECT count(*)
                 FROM #tmptable)
       FROM #tmptable
       GROUP BY make,
                model;
您可以应用窗口聚合来获取总计数:

SELECT make
     , model
     , count(*) as cnt        -- count per Model
     , cast(count(*) * 100.0  -- compared to all counts
            / sum(count(*))
              over () as dec(5,2)) as distribution
FROM #tmptable
group by make
     , model
order by distribution desc;

如果您想要每个Make的模型百分比,则需要通过以下方式添加分区:

SELECT make
     , model
     , count(*) as cnt        -- count per Model
     , cast(count(*) * 100.0
            / sum(count(*))   -- compared to all counts per Make
              over (partition by Make) as dec(5,2)) as distribution
FROM #tmptable
group by make
     , model
order by make, distribution desc;

请显示预期结果以及您的尝试query@Squirrel,我的尝试结果如下:
SELECT table1.registration,table1.make,table1.model,table1.engine\u size,NTILE(20)OVER(按table1.registration排序)作为dbo.table1中的partbyme订购partbyme说明
请使用附加说明更新您的问题information@Squirrel,我刚刚添加了我尝试的查询请同时显示预期结果。我坚持,谢谢联系。您提供的解决方案并不提供所有字段的数据分布。但感谢大家注意,我只是以价值嘉年华为例,但我希望能够确定所有人的数据分布fields@Carltonp:这就是为什么如果在你的问题中总是包含实际的预期结果,那么它将非常有帮助。无论如何,请参见编辑。这就是你想要的吗?所以,这就是我所做的:``选择table1.registration,table1.make,table1.model,table1.engine\u size,NTILE(20)OVER(按table1.registration排序)作为dbo.table1中的partbyme ORDER BY partbyme DESC``我想要一个表示类似“分布”的字段,在该字段中,它将在字段模型中显示%的节日。这有意义吗?对不起,我不知道如何让代码看起来很好。我尝试将代码封装在``中,但它对我不起作用。NTILE会创建大小相同的存储桶,根据您的解释,这不是您想要的。看看我的小提琴,你是个天才,这正是我想要的。我只是做了个例子。但你已经完全抓住了我想要的一切。杰出的伴侣。添加了
模型