我可以在 MySQL 中将 Distinct 与 Union All 一起使用吗?

Posted

技术标签:

【中文标题】我可以在 MySQL 中将 Distinct 与 Union All 一起使用吗?【英文标题】:Can I use Distinct with Union All in MySQL? 【发布时间】:2017-09-18 10:51:19 【问题描述】:

我正在使用UNION ALL 从不同的表中获取值。 我的代码如下。

SELECT DISTINCT datei, amount FROM
(
    SELECT datei, amount, 1 AS identification FROM income
    UNION ALL
    SELECT datee, amount, 2 AS identification FROM expense
    UNION ALL
    SELECT date, amount, 3 AS identification FROM others
) t
ORDER BY `datei` ASC

但我希望它是 distinct 日期。 那么我该怎么做呢? 提前致谢。

【问题讨论】:

对于 2 个相同的日期将有 2 个金额,将选择哪个金额来显示单个记录? 将显示第一个收入金额 “但我希望它在日期上与众不同。” -- DISTINCTDISTINCTROW 的同义词,事情就是这样运作的。 "distinct on date" 没有任何意义。当date 字段中有两行或多行具有相同值时,选择哪一行? 将选择最后一行 【参考方案1】:

要获取日期的单笔金额,您可以使用以下查询

SELECT  datei,SUBSTRING_INDEX(GROUP_CONCAT(amount),',',1) amount
FROM (
    SELECT datei,amount, 1 AS identification FROM income
    UNION ALL
    SELECT datee,amount, 2 AS identification FROM expense
    UNION ALL
    SELECT DATE,amount, 3 AS identification FROM others
) t
GROUP BY datei
ORDER BY `datei` ASC

【讨论】:

【参考方案2】:
SELECT datei, sum(amount)
FROM
(
    SELECT datei, amount, 1 AS identification FROM income
    UNION ALL
    SELECT datee, amount, 2 AS identification FROM expense
    UNION ALL
    SELECT date, amount, 3 AS identification FROM others
) t
GROUP BY datei
ORDER BY datei ASC

【讨论】:

以上是关于我可以在 MySQL 中将 Distinct 与 Union All 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 性能:SELECT DISTINCT 与 GROUP BY

laravel 中 distinct() 的使用方法与去重

sql group by 与 distinct

mysql distinct走索引吗

MySQL:快速 DISTINCT 查询的索引?

mysql ORDER BY,GROUP BY 和DISTINCT原理