在C#中它会是这样的:
table
.GroupBy(row => row.SomeColumn)
.Select(group => group
.OrderBy(row => row.AnotherColumn)
.First()
)
Run Code Online (Sandbox Code Playgroud)
Linq-To-Sql将其转换为以下T-SQL代码:
SELECT [t3].[AnotherColumn], [t3].[SomeColumn]
FROM (
SELECT [t0].[SomeColumn]
FROM [Table] AS [t0]
GROUP BY [t0].[SomeColumn]
) AS [t1]
OUTER APPLY (
SELECT TOP (1) [t2].[AnotherColumn], [t2].[SomeColumn]
FROM [Table] AS [t2]
WHERE (([t1].[SomeColumn] IS NULL) AND ([t2].[SomeColumn] IS NULL))
OR (([t1].[SomeColumn] IS NOT NULL) AND ([t2].[SomeColumn] IS NOT NULL)
AND ([t1].[SomeColumn] = [t2].[SomeColumn]))
ORDER BY [t2].[AnotherColumn]
) AS [t3]
ORDER BY [t3].[AnotherColumn]
Run Code Online (Sandbox Code Playgroud)
但它与MySQL不兼容.
我有一个MySQL表,其值如下:
+--------------+
| user_email |
+--------------+
| ab@gmail.com |
| cd@gmail.com |
| ef@yahoo.com |
| gh@yahoo.com |
| ij@gmail.com |
| kl@other.net |
+--------------+
Run Code Online (Sandbox Code Playgroud)
我需要从此电子邮件地址列表中返回唯一域名列表,例如:
gmail.com,yahoo.com,other.net
到目前为止,我使用以下SQL语句来选择:
SELECT SUBSTRING_INDEX(user_email,'@',-1)
Run Code Online (Sandbox Code Playgroud)
但是,这只解决了我的一半问题 - 它正在返回域名.使用DISTINCT没有做到这一点.我错过了什么?
仅供参考:这是在LAMP堆栈上运行.谢谢!