2017-08-29 30 views
0

我有一个查询返回用户所在的ID,最高值和最高级别的项目。如何在SQL中分组多个聚合结果

我的查询如下:

SELECT id, 
MAX(item) AS highest_item, 
MAX(level) AS highest_level 
FROM data 
GROUP BY 1 
ORDER BY 1; 

我如何可以查询数据库,这样我收到的唯一用户的总数,谁是在同一水平最高,并且具有相同价值最高的项目吗?

回答

0

您可以根据您需要的值获得计数(distcint id)。例如。对于这两个值:

select count(distinct id), highest_item, highest_level 

    from ( 
    SELECT id, 
    MAX(item) AS highest_item, 
    MAX(level) AS highest_item 
    FROM data 
    GROUP BY 1 
) t 
group by highest_item, highest_level 
order by count(distinct id) desc 

或highest_item

select count(distinct id), highest_item 

    from ( 
    SELECT id 
    MAX(item) AS highest_item, 
    MAX(level) AS highest_level 
    FROM data 
    GROUP BY 1 
) t 
group by highest_item 
order by count(distinct id) desc 

为HIGHEST_LEVEL

select count(distinct id), highest_level 

    from ( 
    SELECT id, 
    MAX(item) AS highest_item, 
    MAX(level) AS highest_level 
    FROM data 
    GROUP BY 1 
) t 
group by highest_level 
order by count(distinct id) desc 
+0

利用你的第一个建议,组我得到一个简单计数的结果表,其中不是我所需要的,我需要一个包含关卡#,项目ID和有多少不同用户与同一项目处于同一级别的表。你能否在你的查询中解释“t”字符的用途? – nyvokub

+0

添加了关卡...... t是()t ..子查询的表名,但是用户与问题的关系如何(我假设你是meadn是这个id的数目)。我在查询中没有看到任何用户列。 – scaisEdge

0

你可以试试这个也

Select id,count(Id) from data group by level,item having level=max(level) and item=max(item)