我如何将所有行数据按月分组,而不是按照某个日期使用组来消除
问题描述:
我很难根据日期对所有行数据进行分组。 这是我的表我如何将所有行数据按月分组,而不是按照某个日期使用组来消除
id date Company
---|----------|-------------
1 |2017-06-25| Inzpect
2 |2017-07-04| Inzpect
3 |2017-06-25| Meralco
4 |2017-06-27| Ginebra
5 |2017-06-26| Inzpect
,这是我的SQL
SELECT date ,company FROM tbl_reports WHERE YEAR(date) = '2017' group by date
这是结果我得到我的SQL
date Company
------------|----------
2017-06-25 | Inzpect
2017-06-26 | Inzpect
2017-06-27 | Ginebra
2017-07-04 | Inzpect
它为什么不从得到的所有数据我表和消除我的行1
我想要得到的东西是我想获得所有行和组它通过日期,但它总是与相同的日期排成一行:/。
date Company
------------|----------
2017-06-25 | Inzpect
2017-06-25 | Meralco
2017-06-26 | Inzpect
2017-06-27 | Ginebra
2017-07-04 | Inzpect
你能帮助我的家伙:(
答
试试下面的查询:
SELECT `date`, company
FROM tbl_reports
WHERE YEAR(`date`) = '2017'
order by `date`;
答
看来你需要一个ORDER BY
不是像GROUP BY
SELECT date ,company FROM tbl_reports WHERE YEAR(date) = '2017' ORDER BY date
的聚合函数GROUP BY
GROUP BY语句i经常与集合函数(COUNT,MAX,MIN,SUM,AVG)一起使用来将结果集分组为一个或多个列。
ORDER BY
默认情况下,ORDER BY关键字按升序排序记录。要按降序对记录进行排序,请使用DESC关键字。
答
首先,year()
是一个函数,返回一个数字,所以不要把单引号放在比较中。这是更好的:
where year(date) = 2017
其次,它是更好(性能)直接进行日期比较,而不是使用函数。
其他人提到你似乎想要order by
。这是一个很好的查询版本:
select r.date, r.company
from tbl_reports r
where r.date >= '2017-01-01' and r.date < '2018-01-01'
order by r.date;
Group by是一个聚合函数我怀疑你想要一个order by。 –
我猜你使用'mysql',而不是'sql server',因为这会给你在sql server中的错误(因为它应该,因为它不能推断你的意图)。请不要标记未使用的产品!你期望会发生什么?你在分组,所以自然的行被分组在一起。这正是'group by'所打算做的。另外,你为什么分组但不聚合? – HoneyBadger
_“为什么它没有从我的表中获取所有数据并且排除了我的行中的一行”_--以及因为您按日期分组。你有两个相同日期的记录,所以当然按日期分组会将这两个记录“凝结”成一个记录。这是什么GROUP BY _does_。如果你不想这样做,那么你为什么首先使用它?顺便说一下,选择不属于分组的一部分在SQL中是非法的; MySQL _tolerates_这个错误,如果配置这样做,但结果将是“随机的”。 – CBroe