我想选择有a的行distinct email,请参阅下面的示例表:
+----+---------+-------------------+-------------+
| id | title | email | commentname |
+----+---------+-------------------+-------------+
| 3 | test | rob@hotmail.com | rob |
| 4 | i agree | rob@hotmail.com | rob |
| 5 | its ok | rob@hotmail.com | rob |
| 6 | hey | rob@hotmail.com | rob |
| 7 | nice! | simon@hotmail.com | simon |
| 8 | yeah | john@hotmail.com | john |
+----+---------+-------------------+-------------+
Run Code Online (Sandbox Code Playgroud)
期望的结果是:
+----+-------+-------------------+-------------+
| id | title | email …Run Code Online (Sandbox Code Playgroud) 在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不兼容.
我(彻底)学习SQL,并且遇到了这个GROUP BY条款.
GROUP BY根据您提供的参数聚合或分组结果集.如果在查询中使用此子句,则可以对结果集执行聚合函数,以查找结果集的统计信息,如查找平均值(AVG())或频率(COUNT()).
我的问题是:GROUP BY语句在没有伴随聚合函数的情况下是否有用?
更新
使用GROUP BYas DISTINCT(可能)是一个坏主意的同义词因为我怀疑它更慢.
如果DBMS没有ANY()聚合函数,我通常使用MAX()或MIN().
在mySQL和MS-SQL中有没有更便宜的东西?
在 MySQL 中,我观察到尽管没有 GROUP BY 子句,但在 SELECT 列表中使用 AGGREGATE FUNCTION 的语句会被执行。如果我们这样做,其他 RDBMS 产品(如 SQL Server)会抛出错误。
例如,SELECT col1,col2,sum(col3) FROM tbl1;在没有任何错误的情况下执行并返回 col1、col2 的第一行值和 col3 的所有值的总和。上述查询的结果是单行。
谁能告诉为什么 MySQL 会发生这种情况?
提前致谢!!
有一张桌子是这样的:
id | 名称| 父母 信息 1 | AA | | X 2 | BB | | 3 | CC | | X 4 | DD | 1 | 5 | EE | 1 | 6 | FF | 2 | 7 | GG | 2 | 8 | HH | 3 | 8 | HH | 4
我想用mySQL / PHP这样完成:
从表WHERE信息(如“ x”)中选择ID
和在PHP
对于我在第一个请求的每个id结果中: SELECT ID,名称FROM表,其中idparent = i ORDER BY RAND()LIMIT 1; endFor
例如,结果可能是:
4 | DD 8 |小时 …
MySQL中的Case语句语法: -
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Run Code Online (Sandbox Code Playgroud)
SQL Server 2008中的Case语句语法: -
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Run Code Online (Sandbox Code Playgroud)
我已经解释了差异,以便用户可以理解我在这里尝试说的内容
我在MySql中有以下代码: -
SELECT sum(case when Year=2014 or purchased=0 then 0 else TC.TOTAL_SP_COST-TC.TOTAL_CP_COST end) as EARNINGs
from TABLE TC
Run Code Online (Sandbox Code Playgroud)
如果你看得正确,case语句有2个字段(Year和purchase)
当我在MS SQL SERVER 2008中尝试相同的代码时,当我尝试在SQL SERVER中的case语句中添加2个字段时,我在"或"下面有一个红线.
SELECT sum(case (Year or purchased) when 2014 then …Run Code Online (Sandbox Code Playgroud)