4

私は2つのテーブルを持っており、それぞれに対して順序付きの選択を行っています。両方の注文の結果を1つの結果で確認したいと思いました。

例(簡略化):

"SELECT * FROM table1 ORDER BY visits;"
name|# of visits
----+-----------
 AA | 5
 BB | 9
 CC | 12
.
.
.

"SELECT * FROM table2 ORDER BY spent;"
name|$ spent
----+-------
 AA | 20
 CC | 30
 BB | 50
.
.
.

結果を2列で表示したいので、最も頻繁な訪問者が最高の購入者でもあるかどうかを視覚的に把握できます。(この例は悪いDB設計であり、実際のシナリオではないことを私は知っています。これは例です)

私はこれを手に入れたい:

name by visits|name by spent
--------------+-------------
 AA           | AA
 BB           | CC
 CC           | BB

私はSQLiteを使用しています。

4

5 に答える 5

3
    Select A.Name as NameByVisits, B.Name as NameBySpent
    From (Select C.*, RowId as RowNumber From (Select Name From Table1 Order by visits) C) A
    Inner Join
    (Select D.*, RowId as RowNumber From (Select Name From Table2 Order by spent) D) B
    On A.RowNumber = B.RowNumber
于 2012-10-25T09:06:27.450 に答える
2

これを試して

select 
    ISNULL(ts.rn,tv.rn), 
    spent.name, 
    visits.name 
from 
(select *, (select count(*) rn from spent s where s.value>=spent.value ) rn from spent) ts  
    full outer join
(select *, (select count(*) rn from visits v where v.visits>=visits.visits ) rn from visits) tv     
    on ts.rn = tv.rn
order by ISNULL(ts.rn,tv.rn)

ソーステーブルの各エントリのランクを作成し、2つをランクで結合します。重複するランクがある場合、結果に重複が返されます。

于 2012-10-25T09:10:47.377 に答える
2

私はそれが直接の答えではないことを知っていますが、誰かがそれを必要とする場合に備えてそれを探していました:これは結果が列ごとに1つしかない場合のより簡単な解決策です:

select 
   (select roleid from role where rolename='app.roles/anon') roleid, -- the name of the subselect will be the name of the column
   (select userid from users where username='pepe') userid;          -- same here

結果:

                 roleid                |                userid
 --------------------------------------+--------------------------------------
  31aa33c4-4e66-4da3-8525-42689e46e635 | 12ad8c95-fbef-4287-9834-7458a4b250ee
于 2017-02-17T17:09:35.180 に答える
1

一般的なテーブル式とウィンドウ関数(SQL Server、Oracle、PostreSQLなど)をサポートするRDBMSの場合、次を使用します。

WITH most_visited AS
(
  SELECT ROW_NUMBER() OVER (ORDER BY num_visits) AS num, name, num_visits
  FROM visits
),
most_spent AS
(
  SELECT ROW_NUMBER() OVER (ORDER BY amt_spent) AS num, name, amt_spent
  FROM spent
)
SELECT mv.name, ms.name
FROM most_visited mv INNER JOIN most_spent ms
ON mv.num = ms.num
ORDER BY mv.num
于 2012-10-25T09:08:29.373 に答える
0

以下のように、名前をキーとしてtable1とtable2を結合するだけです。

select a.name, 
   b.name, 
   a.NumOfVisitField, 
   b.TotalSpentField 
from table1 a
left join table2 b on a.name = b.name
于 2012-10-25T09:06:08.480 に答える