感谢您为我提供的所有帮助。 我需要在SQL中的百分比列。我尝试了两种方法但无法获得。
SELECT distinct(v_GS_COMPUTER_SYSTEM_Alias.Model0) AS latitudeModels,
count(v_GS_COMPUTER_SYSTEM_Alias.Model0) AS COUNT,
(SELECT sum(count(*))
FROM v_GS_COMPUTER_SYSTEM v_GS_COMPUTER_SYSTEM_Alias
WHERE v_GS_COMPUTER_SYSTEM_Alias.Model0 LIKE '%Latitude%'
GROUP BY v_GS_COMPUTER_SYSTEM_Alias.model0)
FROM v_GS_COMPUTER_SYSTEM v_GS_COMPUTER_SYSTEM_Alias
WHERE v_GS_COMPUTER_SYSTEM_Alias.Model0 LIKE '%Latitude%'
GROUP BY v_GS_COMPUTER_SYSTEM_Alias.model0
使用子查询以iam的百分比获取数据
Msg 130, Level 15, State 1, Line 4
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
现在使用第二个查询进行iam,但是iam查找所有100%的列到%的列
SELECT distinct(v_GS_COMPUTER_SYSTEM_Alias.Model0) AS latitudeModels,
count(v_GS_COMPUTER_SYSTEM_Alias.Model0) AS COUNT,
(count(v_GS_COMPUTER_SYSTEM_Alias.Model0) / count(*) * 100) AS percent1
FROM v_GS_COMPUTER_SYSTEM v_GS_COMPUTER_SYSTEM_Alias
WHERE v_GS_COMPUTER_SYSTEM_Alias.Model0 LIKE '%Latitude%'
GROUP BY v_GS_COMPUTER_SYSTEM_Alias.model0
ORDER BY v_GS_COMPUTER_SYSTEM_Alias.model0
其给出的数据为
latitudeModels count percent1
Latitude 5179 7 100
Latitude 5250 1 100
Latitude 5285 6 100
Latitude 5289 1 100
Latitude 5290 2226 100
Latitude 5290 2-in-1 57 100
Latitude 5480 10440 100
Latitude 5490 2235 100
Latitude 5580 47 100
Latitude 7280 1125 100
Latitude 7290 28 100
Latitude 7370 2 100
Latitude 7380 8 100
Latitude 7390 150 100
Latitude 7480 13 100
Latitude 7490 6 100
Latitude E4200 1 100
Latitude E4300 9 100
Latitude E4310 11 100
Latitude E5250 945 100
Latitude E5270 1665 100
Latitude E5440 18 100
Latitude E5450 4260 100
Latitude E5470 5231 100
Latitude E6220 13 100
Latitude E6230 33 100
Latitude E6320 256 100
Latitude E6330 671 100
Latitude E6400 15 100
Latitude E6410 42 100
Latitude E6420 370 100
Latitude E6430 546 100
Latitude E6440 3071 100
Latitude E64406349K0135/ 1 100
Latitude E6540 1 100
Latitude E7240 283 100
Latitude E7250 763 100
Latitude E7270 1565 100
Latitude E7440 1582 100
我全力以赴100%您能帮忙吗
答案 0 :(得分:1)
好像有几个问题要解决。正如jarlh在评论中所说,您不需要在SELECT DISTINCT
中使用GROUP BY
,因为GROUP BY
不会返回重复的行。其次,您不应将关键字用作列别名,因此应将count
更改为countRows
或其他未保留的内容。
当前的问题是您正在使用COUNT
,它返回数据类型INT
。你会
需要将该值转换为DECIMAL
数据类型以返回所需的值。以下应返回您在Percent
列中所需的值。
select v_GS_COMPUTER_SYSTEM_Alias.Model0 as latitudeModels,
count(v_GS_COMPUTER_SYSTEM_Alias.Model0) as countRows,
((CAST(count(v_GS_COMPUTER_SYSTEM_Alias.Model0) AS DECIMAL) / CAST(count(*) AS DECIMAL)) * 100) as percent1
from v_GS_COMPUTER_SYSTEM v_GS_COMPUTER_SYSTEM_Alias
Where v_GS_COMPUTER_SYSTEM_Alias.Model0 like '%Latitude%' group by v_GS_COMPUTER_SYSTEM_Alias.model0
order by v_GS_COMPUTER_SYSTEM_Alias.model0
根据您的评论,我添加了以下查询。为了保持准确性,您需要将所有COUNT
调用都强制转换为十进制,否则只会返回整数。请尝试以下操作:
SELECT a.model0,
CAST(CAST(count(*) AS DECIMAL)/CAST((SELECT count(model0) AS cnt FROM v_GS_COMPUTER_SYSTEM a WHERE a.Model0 LIKE '%Latitude%') AS DECIMAL)) *100 AS DECIMAL(18,5)) AS percent1
FROM v_GS_COMPUTER_SYSTEM a WHERE a.Model0 LIKE '%Latitude%' GROUP BY a.model0
答案 1 :(得分:0)
您正在尝试将100乘以分母。
SELECT DISTINCT(v_GS_COMPUTER_SYSTEM_Alias.Model0) AS latitudeModels,
count(v_GS_COMPUTER_SYSTEM_Alias.Model0) as count,
(CAST(count(v_GS_COMPUTER_SYSTEM_Alias.Model0) AS DECIMAL) / CAST(count(*) AS DECIMAL)) * 100 as percent1
from v_GS_COMPUTER_SYSTEM v_GS_COMPUTER_SYSTEM_Alias
Where v_GS_COMPUTER_SYSTEM_Alias.Model0 like '%Latitude%'
group by v_GS_COMPUTER_SYSTEM_Alias.model0
order by v_GS_COMPUTER_SYSTEM_Alias.model0