我已经远远地搜索了这个问题的答案.我正在使用Microsoft SQL Server,假设我有一个如下所示的表:
+--------+---------+-------------+-------------+
| ID | NUMBER | COUNTRY | LANG |
+--------+---------+-------------+-------------+
| 1 | 3968 | UK | English |
| 2 | 3968 | Spain | Spanish |
| 3 | 3968 | USA | English |
| 4 | 1234 | Greece | Greek |
| 5 | 1234 | Italy | Italian |
Run Code Online (Sandbox Code Playgroud)
我想执行一个只选择唯一"NUMBER"列的查询(无论是第一行还是最后一行都不会打扰我).所以这会给我:
+--------+---------+-------------+-------------+
| ID | NUMBER | COUNTRY | LANG |
+--------+---------+-------------+-------------+
| 1 | 3968 | UK | English | …Run Code Online (Sandbox Code Playgroud) 我正在使用.NET 3.5.我有两个字符串数组,可以共享一个或多个值:
string[] list1 = new string[] { "apple", "orange", "banana" };
string[] list2 = new string[] { "banana", "pear", "grape" };
Run Code Online (Sandbox Code Playgroud)
我想要一种方法将它们合并到一个没有重复值的数组中:
{ "apple", "orange", "banana", "pear", "grape" }
Run Code Online (Sandbox Code Playgroud)
我可以用LINQ做到这一点:
string[] result = list1.Concat(list2).Distinct().ToArray();
Run Code Online (Sandbox Code Playgroud)
但我想这对大型阵列来说效率不高.
有没有更好的办法?
重要提示:这不是LINQ-to-SQL问题.这是对象的LINQ.
简短的问题:
LINQ中是否有一种简单的方法可以根据对象的键属性从列表中获取不同的对象列表.
长问题:
我正在尝试对具有键作为其属性之一的对象Distinct()列表执行操作.
class GalleryImage {
public int Key { get;set; }
public string Caption { get;set; }
public string Filename { get; set; }
public string[] Tags {g et; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个Gallery包含的对象列表GalleryImage[].
由于web服务的工作方式[原文如此],我有GalleryImage对象的重复
.我认为用它Distinct()来获得一个独特的列表是一件简单的事情.
这是我想要使用的LINQ查询:
var allImages = Galleries.SelectMany(x => x.Images);
var distinctImages = allImages.Distinct<GalleryImage>(new
EqualityComparer<GalleryImage>((a, b) => a.id == b.id));
Run Code Online (Sandbox Code Playgroud)
问题是这EqualityComparer是一个抽象类.
我不想:
GalleryImage因为它是生成的IEqualityComparer,如下所示是否有一个 …
当查询中没有聚合时,为什么有人会使用group by而不是?
此外,是否有人知道该组与MySQL和SQL Server中的不同性能注意事项.我猜测SQL Server有一个更好的优化器,它们可能接近等价,但在MySQL中,我期望显着的性能优势.
我对dba的答案感兴趣.
编辑:
比尔的帖子很有趣,但不适用.让我更具体一点......
select a, b, c
from table x
group by a, b,c
Run Code Online (Sandbox Code Playgroud)
与
select distinct a,b,c
from table x
Run Code Online (Sandbox Code Playgroud) 我有三个表,A,B,C,其中A是多对一B,B是多对一C.我想要一个A中所有C的列表.
我的表是这样的:A [id,valueA,lookupB],B [id,valueB,lookupC],C [id,valueC].我用两个嵌套的SELECT编写了一个查询,但我想知道是否有可能以某种方式使用DISTINCT进行INNER JOIN.
SELECT valueC
FROM C
INNER JOIN
(
SELECT DISTINCT lookupC
FROM B INNER JOIN
(
SELECT DISTINCT lookupB
FROM A
)
A2 ON B.id = A2.lookupB
)
B2 ON C.id = B2.lookupC
Run Code Online (Sandbox Code Playgroud)
编辑:表格相当大,A是500k行,B是10k行,C是100行,所以如果我做一个基本的内部连接并最后使用DISTINCT,有很多不必要的信息,如下所示:
SELECT DISTINCT valueC
FROM
C INNER JOIN B on C.id = B.lookupB
INNER JOIN A on B.id = A.lookupB
Run Code Online (Sandbox Code Playgroud)
这非常非常慢(比我上面嵌套的SELECT慢一倍.
UNION连接两个结果并删除重复项,而UNION ALL不删除重复项.UNION还对最终输出进行排序.
我想要的是没有重复且没有排序的UNION ALL.那可能吗?
这样做的原因是我希望第一个查询的结果位于最终结果之上,而第二个查询位于底部.(并且每个分类就好像它们单独运行一样)
查询:
SELECT COUNT(*) as count_all,
posts.id as post_id
FROM posts
INNER JOIN votes ON votes.post_id = posts.id
GROUP BY posts.id;
Run Code Online (Sandbox Code Playgroud)
返回nPostgresql 中的记录:
count_all | post_id
-----------+---------
1 | 6
3 | 4
3 | 5
3 | 1
1 | 9
1 | 10
(6 rows)
Run Code Online (Sandbox Code Playgroud)
我只想检索返回的记录数:6.
我使用子查询来实现我想要的,但这似乎不是最佳的:
SELECT COUNT(*) FROM (
SELECT COUNT(*) as count_all, posts.id as post_id
FROM posts
INNER JOIN votes ON votes.post_id = posts.id
GROUP BY posts.id
) as x;
Run Code Online (Sandbox Code Playgroud)
如何在PostgreSQL中获得此上下文中的记录数?
如何使用c#和Linq result从下一个列表中获取:
var pr = new List<Product>()
{
new Product() {Title="Boots",Color="Red", Price=1},
new Product() {Title="Boots",Color="Green", Price=1},
new Product() {Title="Boots",Color="Black", Price=2},
new Product() {Title="Sword",Color="Gray", Price=2},
new Product() {Title="Sword",Color="Green",Price=2}
};
Run Code Online (Sandbox Code Playgroud)
Result:
{Title="Boots",Color="Red", Price=1},
{Title="Boots",Color="Black", Price=2},
{Title="Sword",Color="Gray", Price=2}
Run Code Online (Sandbox Code Playgroud)
我知道我应该使用GroupBy或者Distinct,但要了解如何获得所需的东西
List<Product> result = pr.GroupBy(g => g.Title, g.Price).ToList(); //not working
List<Product> result = pr.Distinct(...);
Run Code Online (Sandbox Code Playgroud)
请帮忙
我正在尝试与制药公司一起填写下拉列表,如Bayer,Medley等.而且,我从DB获得这些名称,这些名称在DB中重复,但具有不同的ID.
我正在尝试使用Linq Distinct(),但我不想使用相等比较器.还有另外一种方法吗?
我的下拉列表必须填写公司的ID和名称.
我正在尝试这样的事情:
var x = _partnerService
.SelectPartners()
.Select(c => new {codPartner = c.codPartner, name = c.name})
.Distinct();
Run Code Online (Sandbox Code Playgroud)
这显示了ddl中的重复公司.
谢谢!
Elasticsearch文档 提示*他们的代码
*文件已修复
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"cardinality": {
"field": "color"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对应于sql查询
SELECT DISTINCT(color) FROM cars
Run Code Online (Sandbox Code Playgroud)
但它实际上对应于
SELECT COUNT(DISTINCT(color)) FROM cars
Run Code Online (Sandbox Code Playgroud)
我不想知道我有多少不同的值,但有什么不同的值.谁知道如何实现这一目标?
distinct ×10
c# ×4
sql ×4
linq ×3
group-by ×2
sql-server ×2
arrays ×1
count ×1
inner-join ×1
linq-to-sql ×1
merge ×1
mysql ×1
performance ×1
postgresql ×1
union ×1
union-all ×1
unique ×1