0

私は2つのテーブルを持っており、次のことをしたいです。最初のテーブルから、特定の条件を満たすすべての行を抽出します。抽出されたすべての行について、最初の列から値を取得します。すべての値について、最初の列に指定された値を含む 2 番目のテーブルからすべての raw を抽出します。2 番目のテーブルから抽出されたすべての raw は、特定の方法で順序付けする必要があり、(順序付け基準に従って) 最初の行を 1 つだけ取りたいと考えています。これは私の問題です。順序付け基準の値が最も高い 1 つの行を取得する方法がわかりません。

追加した

最初のテーブル:

| aaa | Bob |
| bbb | Eva |
| ccc | Bob |

2 番目のテーブル:

| aaa | 111 | 1 |
| aaa | 342 | 2 |
| ccc | 576 | 1 |
| ccc | 749 | 3 |

最初のテーブルから、Bob を含むすべての行を取得します。これらの行の最初の列には、「aaa」と「ccc」の値が含まれています。2番目のテーブルの「aaa」には2つの行があり、最後の列に最大値を持つ行を取得したいと考えています。だから、私は持ってい|aaa|342|2|ます。「ccc」についても同じです。この行 |ccc|749|3| を取ります。最後に、最後の列の値に従って 2 つの行を並べ替えたいと思います。

追加 2

問題の本質は次のとおりであることに気付きました。特定のテーブルで、最初の列に同じ値を含むすべての行を、1 つの「代表的な」行 (3 列目に最大値を持つ)に置き換えたいと考えています。詳細については、次の表を置き換えたいと思います。

| aaa | 111 | 1 |
| aaa | 342 | 2 |
| ccc | 576 | 1 |
| ccc | 749 | 3 |

これによって:

| aaa | 342 | 2 |
| ccc | 749 | 3 |
4

2 に答える 2

2
select t2.* 
  from t1
  join t2 on t2.id = (select t2c.id 
                        from t2 as t2c 
                       where t2c.t1_id = t1.id 
                       order by t2c.val desc
                       limit 1)
 where t1.name = 'Bob'
 order by t2.val

列名を指定しなかったので、私が作成しました。

t2.id一意である必要があります。

于 2010-12-24T12:44:02.087 に答える
1

これは、相関サブクエリを使用して実現できますが、パフォーマンスはひどいものになります。

mysql> select * from user;
+--------+-----------+
| userid | user_name |
+--------+-----------+
| aaa    | Bob       |
| bbb    | Eva       |
| ccc    | Bob       |
+--------+-----------+
3 rows in set (0.00 sec)

mysql> select * from user_data;
+--------+-------+------+
| userid | value | num  |
+--------+-------+------+
| aaa    |   111 |    1 |
| aaa    |   342 |    2 |
| ccc    |   576 |    1 |
| ccc    |   749 |    3 |
| bbb    |  1000 |    1 |
| bbb    |   800 |    2 |
+--------+-------+------+
6 rows in set (0.00 sec)

mysql> SELECT u1.userid,u1.user_name,ud1.value from user_data ud1 join user u1 ON ud1.userid=u1.userid where ud1.value=(SELECT value FROM user_data ud2 WHERE ud2.userid=ud1.userid ORDER BY value desc LIMIT 1) AND u1.user_name='Bob';
+--------+-----------+-------+
| userid | user_name | value |
+--------+-----------+-------+
| aaa    | Bob       |   342 |
| ccc    | Bob       |   749 |
+--------+-----------+-------+
2 rows in set (0.00 sec)
于 2010-12-24T13:03:29.990 に答える