0

したがって、次の列を持つitemsというテーブルの例があります。

  • item_id (整数)
  • person_id (整数)
  • item_name (varchar)
  • item_type (varchar) - 例: 「ニュース」、「イベント」、「ドキュメント」
  • item_date (日時)

...そして、「person_id」、「person_name」という列を持つ表person 。

item_type ごとに、特定の期間に上位 2 人の提出者 (+ 提出されたアイテムの COUNT() ) のリストを表示したいと考えていました。これは基本的に、MySQL の出力が次のようになることを望んでいるものです。

person_name  | item_type | item_count

Steve Jobs   | document  | 11
Bill Gates   | document  | 6
John Doe     | event     | 4
John Smith   | event     | 2
Bill Jones   | news      | 24
Bill Nye     | news      | 21

item_typeごとに個別のクエリを作成せずにこれを行うにはどうすればよいですか? 前もって感謝します!

4

3 に答える 3

2
SELECT  item_type, person_name, item_count
FROM    (
        SELECT  item_type, person_name, item_count,
                @r := IFNULL(@r, 0) + 1 AS rc,
                CASE WHEN @_item_type IS NULL OR @_item_type <> item_type THEN @r := 0 ELSE 1 END,
                @_item_type := item_type,
        FROM    (
                SELECT  @r := 0,
                        @_item_type := NULL
                ) vars,
                (
                SELECT  item_type, person_name, COUNT(*) AS item_count
                FROM    items
                GROUP BY
                        item_type, person_name
                ORDER BY
                        item_type, person_name, item_count DESC
                ) vo
        ) voi
WHERE   rc < 3
于 2009-03-25T12:49:05.500 に答える
1

私はこれがそれをするべきだと思います:

SELECT person_name,item_type,count(item_id) AS item_count
FROM person
LEFT JOIN items USING person_id
GROUP BY person_id

ただし、「item_type」列は危険です。各行は複数のアイテムを表しており、そのうちの1つからのitem_typeのみを表示しています。それらすべてを「GROUP_CONCAT」でリストできます。とても楽しいです。

于 2009-03-25T13:15:40.727 に答える
1

このshoul作業のようなもの:

SELECT
  p.person_name, i.item_type, COUNT(1) AS item_count
FROM
  person p
  LEFT JOIN item i
    ON p.person_id = i.person_id
GROUP BY
  p.person_id,
  i.item_type
HAVING
  COUNT(1) >= (
    SELECT
      COUNT(1)
    FROM
      item i2
    WHERE
      i2.item_type = i.item_type
    GROUP BY
      i2.person_id
    LIMIT 1,1
  )
于 2009-03-25T13:17:51.937 に答える