[英]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.