Sql 如何选择在一列中计算多个值
我是SQL的新手,所以请温柔一点……因为我认为这是一个基本的问题 我试图根据Column1编写一个具有多(13)个计数的查询。第一个计数是总计数。然后对其他12个进行颜色过滤。我可以通过在一个查询中进行多次计数来获得结果,但这会给我13行数据。这里的目标是将所有内容都放在一行上。所以,几乎每个计数都是它自己的列。下面是数据模型的一个示例Sql 如何选择在一列中计算多个值,sql,sql-server,Sql,Sql Server,我是SQL的新手,所以请温柔一点……因为我认为这是一个基本的问题 我试图根据Column1编写一个具有多(13)个计数的查询。第一个计数是总计数。然后对其他12个进行颜色过滤。我可以通过在一个查询中进行多次计数来获得结果,但这会给我13行数据。这里的目标是将所有内容都放在一行上。所以,几乎每个计数都是它自己的列。下面是数据模型的一个示例 Database = CARS, Table = TYPES, Column1 = LICENSE, Column2 = COLOR 以及每种剩余颜色的on
Database = CARS, Table = TYPES, Column1 = LICENSE, Column2 = COLOR
以及每种剩余颜色的on&on&on。这是可行的,但是,如果可能的话,我正试图将其简化为一行数据。提前感谢您您可以使用有条件的
求和()来完成此操作
:
如果使用MySQL,您可以进一步简化:
SELECT SUM(Color = 'Red') AS 'Total Red Cars'
,SUM(Color = 'Blue') AS 'Total Blue Cars'
FROM CARS.TYPES
您只需在select语句中包含颜色,并按其分组,即可计算每种颜色的汽车数量
SELECT Color, Count(*)
FROM CARS.TYPES WITH(NOLOCK)
GROUP BY Color
或
或使用
PIVOT
SELECT RED + BLUE + GREEN AS total,
RED,
BLUE,
GREEN
FROM CARS.TYPES PIVOT (COUNT (LICENSE) FOR COLOR IN ([RED], [BLUE], [GREEN])) P
您可以使用
SUM(Color='Red')
@DanielSparing取决于数据库,这在MySQL中有效,但在SQL Server中无效。很公平,很高兴了解SQL Server,谢谢<代码>与(NOLOCK)是由SQL Server Thx Goat CO.完成的。现在我确实在某些颜色上有一些空值,有没有一种方法可以将它们从显示中删除?可能是迄今为止最好的解决方案的重复,它计算的值是以前不知道的。这里很简单。
SELECT Color, Count(*)
FROM CARS.TYPES WITH(NOLOCK)
GROUP BY Color
SELECT COUNT(CASE WHEN Color = 'RED' THEN 1
ELSE NULL
END) AS RedCars
,COUNT(CASE WHEN Color = 'BLUE' THEN 1
ELSE NULL
END) AS BlueCars
,COUNT(*) AS AllCars
FROM CARS.TYPES WITH ( NOLOCK )
SELECT RED + BLUE + GREEN AS total,
RED,
BLUE,
GREEN
FROM CARS.TYPES PIVOT (COUNT (LICENSE) FOR COLOR IN ([RED], [BLUE], [GREEN])) P
SELECT SUM(Al) AllCount, SUM(Red) RedCount, SUM(Green) GreenCount, ...
(
SELECT 1 AS Al
, CASE WHEN Color = 'Red' THEN 1 ELSE 0 END AS Red
, CASE WHEN Color = 'Green' THEN 1 ELSE 0 END AS Green
...
FROM CARS.Types
)