select max(order_count) from (
SELECT count(DISTINCT order_id) as order_count
FROM a_bkinfo.books
JOIN a_bkinfo.book_topics USING (book_id)
JOIN a_bkorders.order_details USING (book_id)
WHERE topic_id IN ("FCT", "POE")
GROUP BY book_id
) T
这是一个标量的结果,所以你应该能够添加到您的原始查询的选择列表,如果你想看到它附加到每一行:
select ..., (
select max(order_count) from (
SELECT count(DISTINCT order_id) as order_count
FROM a_bkinfo.books
JOIN a_bkinfo.book_topics USING (book_id)
JOIN a_bkorders.order_details USING (book_id)
WHERE topic_id IN ("FCT", "POE")
GROUP BY book_id
) as max_order_count
from ...
,或者您可以使用交叉加入
select ...
from ...
JOIN a_bkorders.order_details USING (book_id),
(
select max(order_count) from (
SELECT count(DISTINCT order_id) as order_count
FROM a_bkinfo.books
JOIN a_bkinfo.book_topics USING (book_id)
JOIN a_bkorders.order_details USING (book_id)
WHERE topic_id IN ("FCT", "POE")
GROUP BY book_id
) T
) T2
where ...
不确定哪个是MySQL的更好选择。
这最后一个选项与最大值的行(S)将返回:
SELECT book_id, title, count(DISTINCT order_id)
FROM a_bkinfo.books
JOIN a_bkinfo.book_topics USING (book_id)
JOIN a_bkorders.order_details USING (book_id)
WHERE topic_id IN ("FCT", "POE")
GROUP BY book_id
HAVING count(DISTINCT order_id) = (
select max(order_count) from (
SELECT count(DISTINCT order_id) as order_count
FROM a_bkinfo.books
JOIN a_bkinfo.book_topics USING (book_id)
JOIN a_bkorders.order_details USING (book_id)
WHERE topic_id IN ("FCT", "POE")
GROUP BY book_id
)
)
什么是努力实现? – 2015-03-19 01:45:10
我试图让'max(count(DISTINCT order_id))'返回一个数字而不是一个错误。 – Blobert 2015-03-19 02:09:36
完成此操作的典型方法是按降序对计数表达式进行排序,然后将结果限制为一行。如果你需要关系,那么你可能不得不采取其他方法之一。 – shawnt00 2015-03-19 03:10:07