繁体   English   中英

带有VIEW的MAX聚合函数

[英]MAX aggregate function with VIEW

我有这个查询:

CREATE VIEW MOSTACTIVESELLER AS
Select a.* from
(
SELECT a.ownerID, b.sellerName, count(distinct a.ITEMID) as item_qty
FROM item AS a
INNER JOIN seller AS b ON a.ownerID = b.sellerID
GROUP BY a.ownerID,b.sellerName 
) a

该视图查询的结果为:

+--ID--+--seller-+-qty--+
| 1000 | Nick     | 3 |
| 1001 | Morgan   | 2 |
| 1002 | stancly  | 1 |
| 1003 | chandler | 1 |
| 1004 | chiptle  | 3 |
| 1005 | samir    | 2 |
| 1006 | matuidi  | 3 |
| 1007 | medjek   | 1 |
| 1008 | leo      | 1 |
| 1009 | georgi   | 1 |
| 1010 | bocheli  | 2 |
+------+----------+---+

所以我想要的是使用像max这样的聚合函数仅返回此列表中最活跃的卖方(仅1),因为您可以看到3个卖方的数量为3,我认为max函数将返回一个。 如果不是,我可能会命令视图DESC并返回最高值。 但无法使其正常工作。 我试图将max与MOSTACTIVESELLER视图一起使用,我不知道该怎么做?

令您惊讶的是,您的查询在MySQL中有效,我很惊讶-通常视图中的FROM子句中不允许子查询。 但这应该可以作为一种观点:

CREATE VIEW MOSTACTIVESELLER AS
    SELECT s.sellerID, s.sellerName, count(distinct i.ITEMID) as item_qty
    FROM item i INNER JOIN
         seller s
         ON i.ownerID = s.sellerID
    GROUP BY s.sellerID, s.sellerName 
    HAVING count(distinct i.ITEMID) = (SELECT count(distinct i.ITEMID)
                                       FROM item i
                                       GROUP BY i.ownerID
                                       ORDER BY 1 DESC
                                       LIMIT 1
                                      );

编辑:

我以为=可以使用LIMIT ,但MySQL在子查询中对LIMIT的使用有奇怪的限制。 更换起来很容易:

    HAVING count(distinct i.ITEMID) >= ALL (SELECT count(distinct i.ITEMID)
                                            FROM item i
                                            GROUP BY i.ownerID
                                           );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM