相关疑难解决方法(0)

如何为MySQL中的每个组选择第一行?

在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 grouping group-by

59
推荐指数
10
解决办法
12万
查看次数

处理默认排序顺序的SQL最佳实践

我读过很多SQL代码,似乎开发人员假定默认排序顺序始终存在.例如,在构建HTML选择列表时,他们只会SELECT id, name FROM table发布一个ORDER BY子句.

根据我自己的经验,似乎dbms ORDER BY总是使用FIFO命令数据,如果没有给出子句而没有索引.但是,订单无法保证.但是,如果表没有变化,我从未见过dbms重新排序数据.

如果表没有变化,您是否曾经历过以非确定性顺序选择数据的dbms?

始终放置ORDER BY子句是最佳做法吗?

sql database sql-order-by

33
推荐指数
4
解决办法
3万
查看次数

选择不同的列以及MySQL中的其他列

我似乎无法为以下(可能是一个古老的)问题找到合适的解决方案,所以希望有人可以解决一些问题.我需要在mySQL中返回1个不同的列以及其他非不同列.

我在mySQL中有以下表:

id      name       destination     rating     country
----------------------------------------------------
1       James      Barbados        5          WI
2       Andrew     Antigua         6          WI
3       James      Barbados        3          WI
4       Declan     Trinidad        2          WI
5       Steve      Barbados        4          WI
6       Declan     Trinidad        3          WI
Run Code Online (Sandbox Code Playgroud)

我希望SQL语句返回DISTINCT名称以及目的地,基于国家/地区的评级.

id      name       destination     rating     country
----------------------------------------------------
1       James      Barbados        5          WI
2       Andrew     Antigua         6          WI
4       Declan     Trinidad        2          WI
5       Steve      Barbados        4          WI
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,詹姆斯和德克兰有不同的评级,但名称相同,所以他们只返回一次.

以下查询返回所有行,因为评级不同.无论如何我可以返回上面的结果集吗?

SELECT (distinct name), destination, rating 
  FROM table 
 WHERE country = 'WI' 
 ORDER BY …
Run Code Online (Sandbox Code Playgroud)

mysql select distinct

29
推荐指数
2
解决办法
5万
查看次数

标签 统计

mysql ×2

database ×1

distinct ×1

group-by ×1

grouping ×1

select ×1

sql ×1

sql-order-by ×1