sql - group by,union,Union为多个列选择不同的值之间有什么区别?

标签 sql group-by union distinct

This question 解释了一种获取多个列的独特组合的方法。但是我想知道DISTINCT,UNION,GROUP BY关键字方法之间的区别。使用它们时,我得到了不同的结果。
我的查询是这样的
查询1。

select 
column1,
column2,
column3
from table
group by 1,2,3

查询2。
select distinct 
column1,
column2,
column3
from table

查询3。
SELECT DISTINCT(ans) FROM (
    SELECT column1 AS ans FROM sametable
    UNION
    SELECT column2 AS ans FROM sametable
    UNION
    SELECT column3 AS ans FROM sametable
) AS Temp

我为上述查询得到不同的行数(编辑:前两个给出的行数相等,但最后一个给出的行数不同)。任何机构都可以解释以上查询的内容吗?特别是第三个?
编辑:请注意,我在同一张 table 上做UNION。在那种情况下会发生什么?

最佳答案

从我认为最简单的DISTINCT开始,实际上就是这样。它返回不同的行组合。考虑一下这个数据集:

COL1      COL2      COL3
A         B         C
D         E         F
G         H         I
A         B         C   <- duplicate of row 1

这将返回3行,因为数据集中的第四行与第一行完全匹配。
结果:
COL1      COL2      COL3
A         B         C
D         E         F
G         H         I

GROUP BY通常用于汇总和其他计算
选择COL1,SUM(COL2)
从表
按列1分组;

对于此数据集:
COL1      COL2
A         5
A         6
B         2
C         3
C         4
C         5

会回来
COL1     SUM(COL2)
A        11
B        2
C        12

一个UNION只是从不同查询中获取结果,并将其显示为1个结果集:
Table1
COL1
A

Table2
COLX
B

Table3
WHATEVER_COLUMN_NAME
Giddyup

select COL1 from Table1
UNION
select COLX from Table2
UNION 
select WHATEVER_COLUMN_NAME from Table3;

结果集:
A
B
Giddyup

执行联合时,列数据类型必须匹配。您不能将数字列与char列结合(除非您明确执行数据转换)

关于sql - group by,union,Union为多个列选择不同的值之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271643/

相关文章:

SQL 表值函数

mysql - 我如何在 MySQL 中执行此查询?

MySQL:无法创建表 './myhairdev/catalog_product_index_website.frm'(错误号:150)

python - Pandas group by 将不同的行转换为具有值数组的一行

php - mysql 中主表(联合)及其左表的计数、求和

sql - wmsys 用户/模式

mysql - `MySQL GROUP BY 使用索引时速度较慢

python - Pandas 直方图按多个属性分组

SQL - 使用 Postgres 中的附加查询扩展 INSERT 查询的结果

MySQL UNION 问题 - 无法获取正确的数据