首页 > 解决方案 > 如何使用 MySQL 查询从集合中获取共同值?

问题描述

我有一张带有 ID、AID 和年份字段的表格。如何在集合中找到最新的共同年份(普通艾滋病成套)

ID  AID Year
---------
1   1   2001
2   1   2002
3   1   2003
4   1   2004

5   2   2003
6   2   2004
7   2   2005

8   3   2004
9   3   2005
10  3   2006

2004 年最近一个共同年份

标签: mysql

解决方案


我相信这是最简单的方法。

询问

    SELECT 
      Year
    FROM 
     t
    GROUP BY 
     Year
    HAVING 
     COUNT(*) = (SELECT COUNT(DISTINCT t.AID) FROM t)

结果

    | Year |
    | ---- |
    | 2004 |

演示

这个查询使它更明显为什么它工作

询问

SELECT 
     Year
  ,  COUNT(*) AS count_per_AID
  , (SELECT COUNT(DISTINCT t.AID) FROM t) AS unique_count_per_AID
  , (COUNT(*) = (SELECT COUNT(DISTINCT t.AID) FROM t)) AS most_common_value
FROM 
 t
GROUP BY 
 Year

结果

| Year | count_per_AID  | unique_count_per_AID | most_common_value |
| ---- | -------------- | -------------------- | ----------------- |
| 2001 | 1              | 3                    | 0                 |
| 2002 | 1              | 3                    | 0                 |
| 2003 | 2              | 3                    | 0                 |
| 2004 | 3              | 3                    | 1                 |
| 2005 | 2              | 3                    | 0                 |
| 2006 | 1              | 3                    | 0                 |

此查询返回所有普通年份,而不是最新的普通年份。

确实感谢您发表评论。
解决方法是使用查询

SELECT 
  Year
FROM 
 t
GROUP BY 
 Year
HAVING 
 COUNT(*) = (SELECT COUNT(DISTINCT t.AID) FROM t)
ORDER BY 
 t.Year DESC
LIMIT 1
;

演示


推荐阅读