sqlserver数某一个值的数量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver数某一个值的数量相关的知识,希望对你有一定的参考价值。
参考技术A sqlserver数某一个值的数量参考以下方法SQLserver统计某个字段不重复的个数
1在查询的命令行处输入:SELECT COUNT(DISTINCT 字段名)FROM 表名
2、怎么以时间为单位取出一段时间的数据
在查询的命令行处输入:SELECT * FROM 表名 where 字段 (这里*号代表所有字段数据,如果你只想得到一部分你想看的字段,可以再加筛选条件)
如何在一个值的数量大于另一个值的 postgresql 行中进行选择? [关闭]
【中文标题】如何在一个值的数量大于另一个值的 postgresql 行中进行选择? [关闭]【英文标题】:How to choose in postgresql rows where amount of one value is bigger than another? [closed] 【发布时间】:2021-03-18 06:30:39 【问题描述】:如何在一个值的数量大于另一个值的 postgresql 行中进行选择? 例如,我只需要选择推荐较大的那些:
换句话说:
create table t(id bigint, place text, opinion text);
insert into t values
(1, 'mnt', 'yes'),
(2, 'mnt', 'no'),
(3, 'mnt', 'no'),
(4, 'cod', 'yes'),
(5, 'cod', 'yes'),
(6, 'cod', 'yes'),
(7, 'qrw', 'yes'),
(8, 'qrw', 'no'),
(9, 'caf', 'no'),
(10, 'mnt', 'yes');
我试图按地点统计分组,意见
【问题讨论】:
你想要什么结果?你在说什么? @GordonLinoff 我想获得那些推荐大于“不推荐”的行 什么是“更大”?你是说你想要“推荐”或“不推荐”还是更高的 id?还有什么? 【参考方案1】:我认为您希望地点的“推荐”意见多于“不推荐”意见。如果是这样,您可以使用带有having
子句的聚合和过滤器:
select place
from mytable
group by place
having count(*) filter(where opinion = 'recommended')
> count(*) filter(where opinion = 'not recommended')
如果你想要这些行的详细信息,你可以使用窗口函数:
select *
from (
select t.*,
count(*) filter(where opinion = 'recommended' ) over(partition by place) as cnt_recommended,
count(*) filter(where opinion = 'not recommended') over(partition by place) as cnt_not_recommended
from mytable t
) t
where cnt_recommended > cnt_not_recommended
【讨论】:
谢谢,正是我需要的 @ДенисИванов:欢迎。我应该强调 Gordon Linoff 的答案与我的几乎相同,并在几秒钟前发布。【参考方案2】:另一个 GROUP BY/HAVING 替代方案。
select place
from tablename
group by place
having sum(case when opinion = 'recommended' then 1
when opinion = 'not recommended' then -1
end) > 0
编辑: @Abelisto 建议这样做,从推荐到不推荐排序:
select place
from tablename
group by place
order by sum(case when opinion = 'recommended' then 1
when opinion = 'not recommended' then -1
end) desc
编辑 2
select
place,
sum(
case
when opinion = 'recommended' then 1
when opinion = 'not recommended' then -1
else 0
end) as rate
from tablename
group by place
order by rate desc
【讨论】:
+1 BTWorder by desc
而不是 having
对于专家来说可能更有趣。就像“最有效的……仍然有效,但不是那么好……平均……几乎无法使用……”
@Abelisto,好主意,已编辑。【参考方案3】:
如果你正在寻找推荐大于不推荐的地方,你可以使用聚合:
select place
from t
group by place
having count(*) filter (where opinion = 'recommended') > count(*) filter (where opinion = 'not recommended');
您也可以更简单地表达为:
select place
from t
where opinion in ('recommended', 'not recommended')
group by place
having avg( (opinion = 'recommended)::int ) > 0.5;
【讨论】:
以上是关于sqlserver数某一个值的数量的主要内容,如果未能解决你的问题,请参考以下文章