SQL并排显示两个结果
我有两个表,正在对每个表进行有序选择。我想在一个结果中看到两个订单的结果 示例(简化): 我想将结果显示为两列,这样我就可以直观地感受到最频繁的访客是否也是最佳买家。(我知道这个例子是糟糕的数据库设计,不是真实的场景。这是一个例子) 我想得到这个:SQL并排显示两个结果,sql,sqlite,Sql,Sqlite,我有两个表,正在对每个表进行有序选择。我想在一个结果中看到两个订单的结果 示例(简化): 我想将结果显示为两列,这样我就可以直观地感受到最频繁的访客是否也是最佳买家。(我知道这个例子是糟糕的数据库设计,不是真实的场景。这是一个例子) 我想得到这个: name by visits|name by spent --------------+------------- AA | AA BB | CC CC | BB 我正在使用SQLi
name by visits|name by spent
--------------+-------------
AA | AA
BB | CC
CC | BB
我正在使用SQLite。只需将表1和表2以名称作为键连接起来,如下所示:
select a.name,
b.name,
a.NumOfVisitField,
b.TotalSpentField
from table1 a
left join table2 b on a.name = b.name
对于支持公共表表达式和窗口函数(例如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
试试这个
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)
它为源表中的每个条目创建一个列组,并在其列组上联接这两个条目。如果存在重复的列组,他们将在结果中返回重复的列组。我知道这不是一个直接的答案,但我正在搜索它,以防有人需要它:这是一个更简单的解决方案,当结果仅为每列一个时:
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
哪个数据库??SQL server?mysql?甲骨文?我不想让他们连名字都有。这将为我提供同一行中一个名称的结果,而我希望最好的买家和最好的访客在同一行中(即使名称不同),这将提供一个完整的交叉连接(上例中为9行),我将很快编辑它,以便使用RowId为您提供一个改进的答案。确定在订购每个表后使用RowId编辑。然后我使用内部连接使用该RowID连接表。仍然无法工作。rowid将是原始表的rowid,而不是已排序的临时表的rowid。如果先在临时表中进行选择,然后再进行主选择(3个步骤,但它可以工作),那么这将是可行的。这就是我最后所做的。在Oracle(我使用它工作)中,我对每个表使用双选择,因此RowId应该引用已排序的表。如果您仔细查看我的查询,它是3个步骤(即3个深度选择),如果它与RowNum(在oracle中)一起工作,我不明白为什么它在这里不工作。但我很高兴我还是提供了帮助。这可能不是这个特定问题的解决方案,但您的“从角色中选择角色ID”解决方案简化并回答了我的问题,尝试将三个Select语句与minmal编码并排放置……谢谢!
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