本文将分享具有CASE,GROUPBY和HAVING的SQLUPDATE的详细内容,并且还将对sqlcasegroupby进行详尽解释,此外,我们还将为大家带来关于as_index=False时,gr
本文将分享具有CASE,GROUP BY和HAVING的SQL UPDATE的详细内容,并且还将对sql case group by进行详尽解释,此外,我们还将为大家带来关于as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别、c# – LINQ with GROUP BY和HAVING COUNT、group by @ having的使用、Group by 和having的理解的相关知识,希望对你有所帮助。
本文目录一览:- 具有CASE,GROUP BY和HAVING的SQL UPDATE(sql case group by)
- as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别
- c# – LINQ with GROUP BY和HAVING COUNT
- group by @ having的使用
- Group by 和having的理解
具有CASE,GROUP BY和HAVING的SQL UPDATE(sql case group by)
下面的SELECT语句返回正确的数据。
SELECT stu.sc, stu.sn, COUNT(*) AS Total, CASE WHEN COUNT(*) = 3 Then ''Letter 1'' WHEN COUNT(*) = 4 Then ''Letter 2'' WHEN COUNT(*) = 5 Then ''Letter 3'' ELSE ''SARB'' END AS Letter FROM STU join att ON (stu.SC = att.SC and stu.SN = att.SN)WHERE att.al in (''c'',''t'',''u'')GROUP by stu.sc, stu.snHAVING COUNT(*) >= 3
我需要基于该查询执行UPDATE,但似乎无法弄清楚。我已经看了多个在线示例,这些示例与我所需要的相似,但是我无法使它正常工作。我需要能够做这样的事情…
UPDATE stuSET stu.tru = CASE When COUNT(*) = 3 Then ''Letter 1'' When COUNT(*) = 4 Then ''Letter 2'' When COUNT(*) = 5 Then ''Letter 3'' ELSE ''SARB'' END FROM stu JOIN att on (stu.sc = att.sc and stu.sn = att.sn)WHERE ATT.AL in (''c'',''t'',''u'')GROUP BY stu.sc, stu.snHAVING COUNT(*) >= 3
我知道我不能在Update语句中直接使用Group By and Haveing,但是我看到了一些示例,在这些示例中,他们在Set and
Join之前使用Select with Group By。我就是无法正常工作。
谢谢你的帮助。
答案1
小编典典WITH CTE AS ( SELECT stu.sc, stu.sn, COUNT(*) AS Total, CASE WHEN COUNT(*) = 3 Then ''Letter 1'' WHEN COUNT(*) = 4 Then ''Letter 2'' WHEN COUNT(*) = 5 Then ''Letter 3'' ELSE ''SARB'' END AS Letter FROM STU join att ON (stu.SC = att.SC and stu.SN = att.SN) WHERE att.al in (''c'',''t'',''u'') GROUP by stu.sc, stu.sn HAVING COUNT(*) >= 3)UPDATE stuSET stu.tru = cte.LetterFROM stu JOIN cte on (stu.sc = cte.sc and stu.sn = cte.sn)
as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别
编辑: 我在np.nan
@ coldspeed,@ wen-ben,@
ALollz指出的字符串中犯的菜鸟错误。答案非常好,因此我不会删除此问题以保留这些答案。
原文:
我已经阅读了这个问题/答案[groupby.first()和groupby.head(1)有什么区别?
该答案说明差异在于处理NaN
价值上。但是,当我打电话给groupby
时as_index=False
,他们俩都选择了NaN
。
此外,Pandas具有groupby.nth
与和类似的功能head
,并且first
有什么差异groupby.first(),groupby.nth(0),groupby.head(1)
有as_index=False
?
下面的例子:
In [448]: df
Out[448]:
A B
0 1 np.nan
1 1 4
2 1 14
3 2 8
4 2 19
5 2 12
In [449]: df.groupby('A',as_index=False).head(1)
Out[449]:
A B
0 1 np.nan
3 2 8
In [450]: df.groupby('A',as_index=False).first()
Out[450]:
A B
0 1 np.nan
1 2 8
In [451]: df.groupby('A',as_index=False).nth(0)
Out[451]:
A B
0 1 np.nan
3 2 8
我看到`firs()’重置了索引,而其他2则没有。除此之外,还有什么区别吗?
c# – LINQ with GROUP BY和HAVING COUNT
var test = session.Query<SomeClass>() .GroupBy(c => new { c.Var1,c.Var2,c.Var3 }) .Where(g => g.Count() > 1) .Select(g => g.Key.Var3) .ToList();
这给出了229个结果(所有记录).我想在Linq中构建的查询是:
SELECT Var3 FROM myTable GROUP BY Var1,Var2,Var3 HAVING COUNT(*) > 1
不知何故,查询给了我27个结果,但Linq表达式给了我229(全部).当我将Linq表达式的where / select部分替换为以下内容时,我会得到一个计数为2或更高的列表:
.Select(g => new { Item = g.Key,Count = g.Count() })
但我不想要一个包含项目(和计数)的列表并且必须通过该列表,我希望HAVING部分在Linq表达式中工作…
编辑2:如果你看看LINQ Group By Multiple fields -Syntax help,这对我也有用.但是,我将获得Var1,Var3和Count的对象列表.在这个列表中,我只想要Count3大于1的Var3.
谁可以指出我正确的方向?
编辑1:正如我在我的介绍中所说,问题Linq with group by having count没有回答我的问题.如果我使用这个代码,我仍然有一组229个结果而不是27个实际上是“重复”的结果(意思是,在计数超过1的组之后).
编辑3:我现在正在使用以下内容.我需要两个陈述,我认为这很奇怪,但如前所述,这似乎是仅选择具有计数>的记录的唯一方法. 1.
var querygroup = session.Query<SomeClass>() .GroupBy(e => new { e.Var1,e.Var2,e.Var3 }) .Select(s => new { s.Key.Var1,s.Key.Var2,s.Key.Var3,Count = s.Count() }) .ToList(); var duplicates = querygroup.Where(g => g.Count > 1) .Select(g => new SomeClass() { Var1 = g.Var1,Var2 = g.Var2,Var3 = g.Var3}) .ToList();
请注意,我决定选择值Var1和Var2,而不是仅选择Var3,并将它们存储在SomeClass()中.这只是一个补充,选择所有内容并没有帮助创建1个语句来获得此选择.
编辑4:我可以在duplicates变量中使用.Where ..部分并将其添加到querygroup语句中,从而创建整个语句.成功?似乎矫枉过正,但至少它有效.
如果有人能找出我需要2个陈述的原因,请详细说明:)
解决方法
var test = session.Query<SomeClass>() .GroupBy(c => new { c.Var1,c.Var3 }) .Select(d=> new { var1 = d.Key.var1,var2 = d.Key.var2,var3=d.Key.var3,records = d.ToList()}) .Where(e => e.records.Count() > 1) .Select(g => g.Var3) .ToList();
group by @ having的使用
使用group by 和having之前要记住:
Group by 和having的理解
1.Group by需要和聚合函数配合使用
2.Having与where的区别
where的作用是对查询结果进行分组前,将不符合where条件的行去掉(在分组前过滤数据)
having的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚合函数
关于具有CASE,GROUP BY和HAVING的SQL UPDATE和sql case group by的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于as_index = False时,groupby.first,groupby.nth,groupby.head有什么区别、c# – LINQ with GROUP BY和HAVING COUNT、group by @ having的使用、Group by 和having的理解等相关知识的信息别忘了在本站进行查找喔。
本文标签: