3

私はこれをもたらすmysqlテーブルで選択しています:

topic user weight  
"hello" 324  3  
"hello" 21   1  
"second thread" 34 1  
"second thread" 21 1  
"second thread" 32 1  
"second thread" 3  3  
"hello" 23   1  

簡単にするために、最初の列「トピック」を数字に変えたいと思います。次のように、1 つの列だけを数値に変換することは可能ですか。

topic user weight  
1     324  3  
1     21   1  
2     34   1  
2     21   1  
2     32   1  
2      3   3  
1     23   1  

助けてくれて本当にありがとうございます!

よろしく、シモーネ

4

3 に答える 3

1

トピックのリストを取得し、DISTINCT結合する行番号を割り当てるメソッドを次に示します。これにより、1 つのクエリと変数で実行できるようになります。

編集rownum: 句の変数を初期化するようにリファクタリングされました。これは、見た目が少し整然としており、行番号の値をFROM生成しません。n*2

SELECT id, yourtable.*
FROM 
  yourtable
  JOIN (
    /* Suquery gets row rank per distinct topic */
    SELECT topic, @rownum:=@rownum+1 AS id
    FROM (
      /* Variable initialized in FROM clause */
      SELECT @rownum:=0
    ) sr JOIN (
      SELECT DISTINCT topic FROM yourtable
    ) t
  ) topicids ON yourtable.topic = topicids.topic

http://sqlfiddle.com/#!2/58d53/14

ID  TOPIC    USER   WEIGHT
1   "hello"  324    3
1   "hello"  21     1
2   "second" 34     1
2   "second" 21     1
2   "second" 32     1
2   "second" 3      3
1   "hello"  23     1
于 2013-02-11T17:58:36.453 に答える
1

おそらく一時テーブルを使用していますか?

CREATE TABLE temp2 (
  id int AUTO_INCREMENT PRIMARY KEY,
  topic varchar(20));

INSERT INTO temp2 (topic)
SELECT DISTINCT topic FROM temp;

SELECT b.id, a.user, a.weight
FROM temp a
INNER JOIN temp2 b ON b.topic = a.topic

結果

| | ID | ユーザー | 重量 |
----------------------
| | 1 | 324 | 3 |
| | 1 | 21 | 1 |
| | 2 | 34 | 1 |
| | 2 | 21 | 1 |
| | 2 | 32 | 1 |
| | 2 | 3 | 3 |
| | 1 | 23 | 1 |

デモを見る

于 2013-02-11T17:57:07.197 に答える
0

また、試すことができます

SELECT
   topic, 
   (SELECT COUNT(topic) FROM yourtable where topic = outer_table.topic),
   user, 
   weight  
FROM 
   yourtable  outer_table
于 2013-02-11T18:02:06.597 に答える