与MySQL不同的对立面

see*_*ous 26 mysql

我想知道在sql中是否存在"select distinct"的相反情况,这样我就可以用来从只重复多次的表中获取值.

谢谢

Boh*_*ian 27

select some_column, count(*)
from some_table
group by 1
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

像MySQL数据库,你甚至可以省略选择count(*)离开只是列值:

select some_column
from some_table
group by 1
having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

  • `group by 1`表示"在select子句中按列号1分组",在这种情况下相当于编码`group by some_column`.在分组时,我更喜欢使用数字而不是列名,特别是当列是计算时 - 它节省了必须重新编码整个计算的时间,当表达式很长时很难读取 (5认同)
  • @bohemian"group by 1"的`1`是什么意思,select子句中的第一列是什么? (3认同)
  • @Pacerier它只适用于`group by`和`order by`.它是SQL标准的一部分. (2认同)
  • @Bohemian 抱歉挖坟,但为了公共记录,我不能在不添加您仍然可以使用别名的情况下留下这个 - 例如`SELECT SOME(BIG(CALC(my_column+42))) AS计算的FROM [...] GROUP BY计算` (2认同)

pax*_*blo 7

你需要一个group by带有having子句的东西,例如:

select person, count(friends)
from people
group by person
having count(friends) > 1
Run Code Online (Sandbox Code Playgroud)

这会给你一份所有人和他们的朋友数量的清单,除了那些只有他们的母亲或更糟糕,甚至不是他们的母亲的朋友,这些可怜的悲伤的鞋底:-)

你必须使用having,而不是where在这种情况下,因为前者过滤器之前,而后者过滤分组后,和你没有聚合函数的信息一样count(),直到之后的分组已经发生.