0

私はそのようなMYSQLテーブルを持っています

  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `screen_name` text NOT NULL,
  `user_no` int(20) NOT NULL,
  `avatar` text NOT NULL,
  `name` varchar(50) NOT NULL,
  `location` varchar(50) DEFAULT NULL
  PRIMARY KEY (`id`)

SQLクエリを作成する必要があります。

  • idDESCで注文
  • GROUP BYscreen_name
  • 「name」フィールドと「screen_name」フィールドを取得する
  • id$idminと$idmaxの間

ネストされたクエリJOINクエリのパフォーマンスを別々に比較します。
クエリワードを提案できますか?
ありがとうございました

編集:ネストされたクエリの場合、私はこれを試しました:

SELECT `name`,`screen_name` FROM `mytable` WHERE `id` IN
(SELECT `id` FROM `mytable` WHERE `id` BETWEEN 100 AND 500 ORDER BY `id` DESC)
GROUP BY `screen_name`

結合型は書き込めませんでした。

Edit2:そのような行があると言ってください:

  • id = 1、screen_name = mike、name = uk
  • id = 2、screen_name = albert、name = usa
  • id = 3、screen_name = ash、name = uk
  • id = 4、screen_name = albert、name = new_zelland

次のような結果を得る必要があります:
id = 4
id = 3
id = 1

4

1 に答える 1

2

クエリは次の形式である必要があります。

SELECT MAX(id) AS max_id, user_no, screen_name
FROM table_name
WHERE id BETWEEN $idmin AND $idmax
GROUP BY screen_name
ORDER BY MAX(id) DESC;

SQLFIDDLEデモはこちら

またはサブクエリを使用:

SELECT a.id, a.name, a.screen_name
FROM example a
    INNER JOIN (SELECT screen_name, MAX(id) id
                FROM example
                WHERE id BETWEEN 1 AND 4
                GROUP BY screen_name
               ) b
        ON a.screen_name = b.screen_name
           AND a.id = b.id
ORDER BY a.id DESC;

SQLFIDDLEデモはこちら

于 2012-08-28T10:07:20.757 に答える