0

次のテーブル構造とデータを考慮してください。

+--------------------+-------------+
|     venue_name     |  listed_by  |
+--------------------+-------------+
| My Venue Name      |      1      |
| Another Venue      |      2      |
| My Venue Name      |      5      |
+--------------------+-------------+ 

私は現在、MySQLのGROUP BY機能を使用して、一意の会場名のみを選択しています。ただし、これはの最初の出現のみを返しますが、条件(この場合、フィールドの値が2より大きいMy Venue Name場合)に基づいて返したいと思います。listed_by

基本的に、これが私が達成したいことのいくつかの擬似コードです:

Select all records
Group by name
if grouped, return the occurance with the higher value in listed_by

この機能を可能にするSQLステートメントはありますか?

編集:クエリに関係する他のフィールドがあり、そのlisted_byフィールドはクエリの他の場所でも使用する必要があることを述べておく必要があります。使用している元のクエリは次のとおりです。

SELECT  l1.field_value AS venue_name, 
    base.ID AS listing_id,
        base.user_ID AS user_id,
        IF(base.user_ID > 1, 'b', 'a') AS flag,
        COUNT(img.ID) AS img_num
        FROM ( listingsDBElements l1, listingsDB base )
        LEFT JOIN listingsImages img ON (base.ID = img.listing_id AND base.user_ID = img.user_id and img.active = 'yes')
        WHERE  l1.field_name = 'venue_name'
               AND l1.field_value LIKE '%name%'
               AND base.ID = l1.listing_id
               AND base.user_ID  = l1.user_id
               AND base.ID = l1.listing_id
               AND base.user_ID  = l1.user_id
               AND base.active = 'yes'
    GROUP BY  base.Title  ORDER BY  flag desc,img_num desc
4

1 に答える 1

4

他のフィールドについて言及していない限り、最も簡単な解決策は次のとおりです。

  SELECT venue_name,
         MAX(listed_by)
    FROM tblname
   WHERE listed_by > 2
GROUP BY venue_name

他のフィールドでは、次のようになります (venue_name + listed_byペアに重複がないことを前提としています)。

    SELECT *
      FROM tblname t1
INNER JOIN (SELECT venue_name,
                   MAX(listed_by) max_listed_by
              FROM tblname
             WHERE listed_by > 2
          GROUP BY venue_name) t2 ON t1.venue_name = t2.venue_name
                                 AND t1.listed_by = t2.max_listed_by
于 2012-07-16T22:34:16.677 に答える