我想选择有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 BY
as 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)