如何计算SQL上的多行

如何计算SQL上的多行,sql,sql-server,sqlite,Sql,Sql Server,Sqlite,我有一张像这样的桌子: ComputerID | Free_Space | Disk_Size ------------------------------------------ Computer1 | 10 | 15 Computer1 | 10 | 10 Computer1 | 05 | 10 Computer2 | 05 | 05 Computer2 | 05 | 10 Computer3 | 1

我有一张像这样的桌子:

ComputerID | Free_Space | Disk_Size
------------------------------------------
Computer1  | 10         | 15
Computer1  | 10         | 10
Computer1  | 05         | 10
Computer2  | 05         | 05
Computer2  | 05         | 10
Computer3  | 11         | 15
Computer3  | 04         | 05
ComputerID | Free_Space | Disk_Size
------------------------------------------
Computer1  | 25         | 35
Computer2  | 10         | 15
Computer3  | 15         | 20
SELECT ComputerID,
SUM(free_space/1073741824) AS 'Total Free Space',
SUM(disk_size/1073741824) AS 'Total Size'

FROM myTable

GROUP BY ComputerID
我需要实现这样的目标:

ComputerID | Free_Space | Disk_Size
------------------------------------------
Computer1  | 10         | 15
Computer1  | 10         | 10
Computer1  | 05         | 10
Computer2  | 05         | 05
Computer2  | 05         | 10
Computer3  | 11         | 15
Computer3  | 04         | 05
ComputerID | Free_Space | Disk_Size
------------------------------------------
Computer1  | 25         | 35
Computer2  | 10         | 15
Computer3  | 15         | 20
SELECT ComputerID,
SUM(free_space/1073741824) AS 'Total Free Space',
SUM(disk_size/1073741824) AS 'Total Size'

FROM myTable

GROUP BY ComputerID
我尝试过这样的事情,但没有成功

 SELECT ComputerID,
 SUM(free_space/1000000000) AS 'Total Free Space',
 SUM(disk_size/1000000000) AS 'Total Size'
 FROM myTable
 ORDER BY ComputerID

任何帮助都将不胜感激。

要实现您现在提出的问题,只需执行以下操作:

SELECT ComputerID,
SUM(free_space) AS 'Total Free Space',
SUM(disk_size) AS 'Total Size'

FROM myTable

GROUP BY ComputerID

如果值以字节为单位,并且您希望以gb为单位显示它们,请执行以下操作:

ComputerID | Free_Space | Disk_Size
------------------------------------------
Computer1  | 10         | 15
Computer1  | 10         | 10
Computer1  | 05         | 10
Computer2  | 05         | 05
Computer2  | 05         | 10
Computer3  | 11         | 15
Computer3  | 04         | 05
ComputerID | Free_Space | Disk_Size
------------------------------------------
Computer1  | 25         | 35
Computer2  | 10         | 15
Computer3  | 15         | 20
SELECT ComputerID,
SUM(free_space/1073741824) AS 'Total Free Space',
SUM(disk_size/1073741824) AS 'Total Size'

FROM myTable

GROUP BY ComputerID

任何使用聚合函数(例如sum())与非聚合字段(computerid)混合的查询都必须使用group by子句:

SELECT ...
FROM ...
GROUP BY ComputerID
ORDER BY ...

你需要一个GROUPBY子句

SELECT
    ComputerID,
    SUM(free_space/1000000000) AS "Total Free Space",
    SUM(disk_size/1000000000) AS "Total Size"
FROM
    myTable
GROUP BY
    ComputerID
ORDER BY
    ComputerID
还要注意,大多数SQL方言使用单引号作为字符串分隔符,双引号作为列名分隔符。对于SQL Server,还可以使用方括号


[Total Free Space]

订购方
替换为
分组方
,该分组方工作正常,但在计算中仍存在问题,计算不正确。e、 g.Computer1应该是76.7(以GB为单位),但看起来是155419。有什么线索吗?Coloca então os dados que tens de input na tua questão(faz um select*),para eu testar melhor.把输入数据放在你的问题上(用select*),我会告诉你为什么。@NunoMarques要实现你在问题上所做的,你不需要除法。就这么做吧。如果大小以字节为单位,并且希望gb将除法改为1024三次或1073741824一次。这很好,最后一个问题是:如何在SELECT DISTINCT子句中包含CASE语句。我要做的是,如果磁盘大小小于GB,它将给出以MB为单位的总数,如果小于TB,则给出以GB为单位的总数,否则它将给出以TB为单位的总数。我希望这是有意义的。我将从查询返回纯字节,并在应用程序中执行这种逻辑。对于CASE,它的工作原理是这样的:
CASE当空闲空间<1000时,转换(VARCHAR,空闲空间)+当空闲空间<1000000时转换为“字节”,然后转换(VARCHAR,空闲空间/1000)+当。。。ELSE CONVERT(VARCHAR,free_space/10000000000)+“TB”END
@Oliver选择不同的d.name作为名称,大小写为dk.size<1000000000,然后求和(cast(dk.size/1000000000作为文本))|“GB”ELSE SUM(cast(dk.size/10000000000作为文本))| |“GB”END从设备d连接到dk.computer上的磁盘dk_id=d.id,其中为圆形(dk.size/1073741824.0,1)>0和d.type='Computer'按d.name分组我会说,要么使用DISTINCT,要么在本例中使用groupby,但两者一起使用?使用2的幂可能更合适,功率(2,10)=1KB,功率(2,20)=MB,功率(2,30)=1GB,功率(2,40)=1TB。