1

特定のユーザーについて、ユーザーが毎日最良の値を取得した回数を返す SQL クエリを作成したいと考えています。
私はMySQLを使用しています。

-----------------------------
| User |    Date    | Value |
-----------------------------
| John | 2013-04-03 | 57    |
| John | 2013-04-04 | 13    |
| John | 2013-04-05 | 102   |
| John | 2013-04-06 | 64    |
| Bob  | 2013-04-03 | 8     |
| Bob  | 2013-04-04 | 83    |
| Bob  | 2013-04-05 | 44    |
| Bob  | 2013-04-06 | 101   |
| Paul | 2013-04-03 | 22    |
| Paul | 2013-04-04 | 72    |
| Paul | 2013-04-05 | 50    |
| Paul | 2013-04-06 | 15    |
-----------------------------

例 :
John : 2 回 (2013-04-03 & 2013-04-05)
Bob : 2 回 (2013-04-04 & 2013-04-06)
Paul : 0 回

どの関数を使用する必要があるかわかりません ( COUNT(*) ? SUM(*) ? MAX(Value) ? GROUP BY ?)。
各日付のループを作成して合計を作成するにはどうすればよいですか?

4

3 に答える 3

0

私は次のことを思いついた

  select
   u.user, count(*) as top_performer
  from 
    my_table u
    join (
      select valdate, max(value) as value 
      from my_table 
      group by valdate
    ) mv on
      mv.valdate = u.valdate and
      mv.value = u.value
  group by
    u.user

JWの回答は、ポールのゼロスコアをリストしているため、より完全である可能性があります.一方、私の回答は、left join別のユーザーテーブルに移動することを前提としています.

http://sqlfiddle.com/#!2/409ca/11

于 2013-04-10T09:43:13.833 に答える
0

これを達成するには、次のクエリを試すことができます-

WITH T AS (SELECT USER,COUNT(*) 
             FROM TABLE_NAME WHERE (DATE,VALUE) IN (SELECT DATE, MAX(VALUE) 
                                                      FROM TABLE_NAME 
                                                  GROUP BY DATE)
          GROUP BY USER)

SELECT * FROM T 
UNION SELECT USER,0 
        FROM TABLE_NAME 
       WHERE USER NOT IN (SELECT USER FROM T)
于 2013-04-10T09:11:53.300 に答える
0

使用している RDBMS について言及していないため、ほぼすべてのRDBMSで機能するクエリを次に示します。

SELECT  aa.User, COUNT(bb.User ) TotalCount
FROM    (SELECT DISTINCT User FROM TableName) aa
        LEFT JOIN
        (
            SELECT  a.User
            FROM    TableName a
                    INNER JOIN
                    (
                        SELECT  Date, MAX(Value) max_val
                        FROM    TableName
                        GROUP   BY Date
                    ) b ON  a.Date = b.Date AND
                            a.Value = b.max_val
        ) bb ON aa.User = bb.User 
GROUP   BY aa.User

出力

╔══════╦════════════╗
║ USER ║ TOTALCOUNT ║
╠══════╬════════════╣
║ Bob  ║          2 ║
║ John ║          2 ║
║ Paul ║          0 ║
╚══════╩════════════╝
于 2013-04-10T09:02:17.533 に答える