Sql 带两个条件的分组

Sql 带两个条件的分组,sql,oracle,Sql,Oracle,我有一张名为cars的桌子。 它有三列:标记、颜色、日期5 我需要将该表与汽车颜色和日期在2005-01-01之后的汽车分组 select color, count(color), (select color from cars where date5 > date'2005-01-01') from cars group by color; 但它在所有汽车中都算第三列 我需要得到三个专栏: 1.颜色 2.所有颜色的计数 3.日期在2005-01-01之后的所有颜色的计数 select

我有一张名为cars的桌子。 它有三列:标记、颜色、日期5

我需要将该表与汽车颜色和日期在2005-01-01之后的汽车分组

select color, count(color), (select color from cars where date5 > date'2005-01-01')
from cars
group by color;
但它在所有汽车中都算第三列


我需要得到三个专栏: 1.颜色 2.所有颜色的计数 3.日期在2005-01-01之后的所有颜色的计数

select color, count(color), (select color from cars where date5 > date'2005-01-01')
from cars
group by color;

第三个条件让我感到困惑。

如果你想知道2005年1月1日之后每种颜色的汽车数量 你应该使用

select color, count(*)
from cars 
where date5 > TO_DATE('01/01/2005','dd/mon/yyyy')
group by color;

您可以使用case语句在满足条件时生成1,否则生成零,然后求和

select
    color,
    COUNT(*) AS all_cars,
    SUM(CASE WHEN date5 > date'2005-01-01' THEN 1 ELSE 0 END) AS newer_cars
from cars
group by color;

不确定我是否理解您的问题,但如果我理解,那么在MS SQL Server语法中,它可能看起来像:

选择c.color, 将*计算为所有车辆的计数, ISNULLSUMnewerColors.newercolorscount,0作为新的颜色计数 来自c车 左连接选择颜色, 计数*为新颜色计数 来自汽车 其中日期5>“2005-01-01” 按颜色分组为新颜色 关于newerColors.color=c.color 按颜色分组
您就快到了,只需在查询中使用SUM,如下所示:

select color, 
count(color), 
sum(case when date5 > date'2005-01-01' then 1 end)
from cars
group by color

干杯

你能澄清你的最后一句话吗?但它计算所有汽车的第三列。提供样本数据和期望的结果。我需要得到三列:1。颜色2。所有颜色的计数3。2005-01-01日期后所有颜色的计数第三个条件让我感到困惑。不客气。另外,由于您是StackOverflow的新手,我想通知您,您可以通过勾选答案旁边的勾号来选择好答案并接受对您帮助最大的答案。在这个网站上,投票或接受回答都算作感谢。