次のクエリは、最も多くの の出現を検出しますdiallednumber
。
SELECT COUNT( * ) AS `Rows` , diallednumber
FROM logData
GROUP BY diallednumber
ORDER BY `Rows` DESC
LIMIT 20
のコストを表示する別の列がありdiallednumber
ます。
diallednumber
発生回数に基づいて最も高価なものを提供するクエリを作成できません。
SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
SELECT MAX(calls) AS maxCalls
FROM (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
) AS c
SELECT SUM(l.cost), l.dialledNumber
FROM logData AS l
JOIN (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
) AS c
ON l.dialledNumber = c.dialledNumber
JOIN (SELECT MAX(calls) AS maxCalls
FROM (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
)
) AS m
ON m.maxCalls = c.calls
最大通話数が同じ2つの番号がある場合は、両方が表示されます。あなたが空想を得たいならば、あなたは費用の合計の最大で飲むことができます。
m
サブクエリは、結合なしで「単純な」数値として使用される場合があります。
SELECT SUM(l.cost), l.dialledNumber
FROM logData AS l
JOIN (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
) AS c
ON l.dialledNumber = c.dialledNumber
AND c.calls = (SELECT MAX(calls) AS maxCalls
FROM (SELECT COUNT(*) AS calls, dialledNumber
FROM logData
GROUP BY dialledNumber
)
) AS m
優れたオプティマイザは、両方に同じクエリプランを使用します。
そして最大のコスト:
SELECT diallednumber
, COUNT(diallednumber)
, SUM(cost)
FROM logdata
GROUP
BY diallednumber
ORDER
BY SUM(cost) DESC LIMIT 1;