Mysql SQL在计算相关列时按组进行分组

Mysql SQL在计算相关列时按组进行分组,mysql,sql,Mysql,Sql,我无法将以下查询分组在一起: SELECT id , decile_clean , COUNT(DISTINCT source) AS unique_sources FROM uld_data_combined_rasterized GROUP BY id , decile_clean HAVING COUNT(DISTINCT source) = 3 我想要的输出是: +------------+--------------+ | decile_

我无法将以下查询分组在一起:

SELECT id
     , decile_clean
     , COUNT(DISTINCT source) AS unique_sources
  FROM uld_data_combined_rasterized
 GROUP 
    BY id
     , decile_clean
HAVING COUNT(DISTINCT source) = 3
我想要的输出是:

+------------+--------------+
| decile_clean | count |
+------------+--------------+
| Decile4to8   |          9 |
| Decile9to10  |          1 |
| Decile1to3   |          1 |
在过去的两个小时里,我试图将一堆不同的查询混合在一起,但似乎无法得到它

我原来的桌子是这样的:

+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id           | varchar(255) | YES  |     | NULL    |       |
| date         | date         | YES  |     | NULL    |       |
| source       | varchar(11)  | NO   |     |         |       |
| decile_clean | varchar(11)  | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

这似乎是两个级别的聚合:

SELECT decile_clean, COUNT(*)
FROM (SELECT id, decile_clean, COUNT(DISTINCT source) AS unique_sources
      FROM uld_data_combined_rasterized
      GROUP BY id,decile_clean
      HAVING COUNT(DISTINCT source) = 3
     ) d
GROUP BY decile_clean

这似乎是两个级别的聚合:

SELECT decile_clean, COUNT(*)
FROM (SELECT id, decile_clean, COUNT(DISTINCT source) AS unique_sources
      FROM uld_data_combined_rasterized
      GROUP BY id,decile_clean
      HAVING COUNT(DISTINCT source) = 3
     ) d
GROUP BY decile_clean

对于MySql 8.0+,您可以使用
COUNT()
window函数:

SELECT DISTINCT 
       decile_clean, 
       COUNT(*) OVER (PARTITION BY decile_clean) AS count
FROM uld_data_combined_rasterized
GROUP BY id, decile_clean
HAVING COUNT(DISTINCT source) = 3

对于MySql 8.0+,您可以使用
COUNT()
window函数:

SELECT DISTINCT 
       decile_clean, 
       COUNT(*) OVER (PARTITION BY decile_clean) AS count
FROM uld_data_combined_rasterized
GROUP BY id, decile_clean
HAVING COUNT(DISTINCT source) = 3

你就是那个人!我有点想我必须做一个from查询…但是不能把它拼凑起来。非常感谢你。我会在9分钟内接受答案,当它允许我!在选择列表中不需要计数,只需要在
中有
。或者更改为
拥有唯一的资源=3
,以避免冗余。你就是那个人!我有点想我必须做一个from查询…但是不能把它拼凑起来。非常感谢你。我会在9分钟内接受答案,当它允许我!在选择列表中不需要计数,只需要在
中有
。或者更改为
拥有唯一的_sources=3
,以避免冗余。很高兴知道,不幸的是,由于一些兼容性问题(GCP还不支持8),我忘了提到我在5.6上运行此功能。很高兴知道,不幸的是,由于一些兼容性问题,我忘了提到我在5.6上运行此功能(GCP还不支持8).