PostgreSQL查询组由两个“参数”组成
两天来,我一直在尝试解决以下PostgreSQL查询,但都没有成功 假设我有下表: | date | value | ------------------------- | 2018-05-11 | 0.20 | | 2018-05-11 | -0.12 | | 2018-05-11 | 0.15 | | 2018-05-10 | -1.20 | | 2018-05-10 | -0.70 | | 2018-05-10 | -0.16 | | 2018-05-10 | 0.07 | 我需要找出每天计算正值和负值的查询: | date | positives | negatives | ------------------------------------------ | 2018-05-11 | 2 | 1 | | 2018-05-10 | 1 | 3 | 我已经能够找出只提取肯定或否定的查询,但不能同时提取两者:PostgreSQL查询组由两个“参数”组成,sql,postgresql,select,group-by,Sql,Postgresql,Select,Group By,两天来,我一直在尝试解决以下PostgreSQL查询,但都没有成功 假设我有下表: | date | value | ------------------------- | 2018-05-11 | 0.20 | | 2018-05-11 | -0.12 | | 2018-05-11 | 0.15 | | 2018-05-10 | -1.20 | | 2018-05-10 | -0.70 | | 2018-05-10 | -0.16 |
SELECT to_char(table.date, 'DD/MM') AS date
COUNT(*) AS negative
FROM table
WHERE table.date >= DATE(NOW() - '20 days' :: INTERVAL) AND
value < '0'
GROUP BY to_char(date, 'DD/MM'), table.date
ORDER BY table.date DESC;
能请人帮忙吗?这让我快发疯了。谢谢。将子句与聚合函数一起使用
SELECT to_char(table.date, 'DD/MM') AS date,
COUNT(*) FILTER (WHERE value < 0) AS negative,
COUNT(*) FILTER (WHERE value > 0) AS positive
FROM table
WHERE table.date >= DATE(NOW() - '20 days'::INTERVAL)
GROUP BY 1
ORDER BY DATE(table.date) DESC
将子句与聚合函数一起使用
SELECT to_char(table.date, 'DD/MM') AS date,
COUNT(*) FILTER (WHERE value < 0) AS negative,
COUNT(*) FILTER (WHERE value > 0) AS positive
FROM table
WHERE table.date >= DATE(NOW() - '20 days'::INTERVAL)
GROUP BY 1
ORDER BY DATE(table.date) DESC
我只想:
select date_trunc('day', t.date) as dte,
sum( (value < 0)::int ) as negatives,
sum( (value > 0)::int ) as positives
from t
where t.date >= current_date - interval '20 days'
group by date_trunc('day', t.date),
order by dte desc;
注:
我更喜欢使用date_trunc,而不是转换为字符串来删除时间组件。
您不需要立即使用并转换为日期。您可以只使用当前日期。
当您可以使用interval关键字指定一个间隔时,将字符串转换为间隔似乎很尴尬。
我只想:
select date_trunc('day', t.date) as dte,
sum( (value < 0)::int ) as negatives,
sum( (value > 0)::int ) as positives
from t
where t.date >= current_date - interval '20 days'
group by date_trunc('day', t.date),
order by dte desc;
注:
我更喜欢使用date_trunc,而不是转换为字符串来删除时间组件。
您不需要立即使用并转换为日期。您可以只使用当前日期。
当您可以使用interval关键字指定一个间隔时,将字符串转换为间隔似乎很尴尬。