1

次のクエリは、最も多くの の出現を検出しますdiallednumber

SELECT COUNT( * ) AS  `Rows` , diallednumber
FROM logData
GROUP BY diallednumber
ORDER BY  `Rows` DESC 
LIMIT 20

のコストを表示する別の列がありdiallednumberます。

diallednumber発生回数に基づいて最も高価なものを提供するクエリを作成できません。

4

2 に答える 2

2

番号ごとの通話数

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

優れたオプティマイザは、両方に同じクエリプランを使用します。

于 2013-01-09T16:55:03.230 に答える
1

そして最大のコスト:

SELECT diallednumber
     , COUNT(diallednumber)
     , SUM(cost) 
  FROM logdata 
 GROUP 
    BY diallednumber 
 ORDER 
    BY SUM(cost) DESC LIMIT 1;
于 2013-01-09T17:01:09.683 に答える