【问题标题】:Combine results of two unrelated queries into single view将两个不相关查询的结果合并到单个视图中
【发布时间】:2014-07-05 05:42:42
【问题描述】:

是否可以将两个单独(不相关)的 sql 查询的结果合并到一个视图中。我正在尝试为用户汇总一些数字并计算本月视频的观看次数以显示在仪表板上。

即,

select count(*) from video where monthname(views) = 'May';

select sum(sessions) from user where user_id = 6;

我想创建一个包含这两个结果的视图。

这可能吗?

【问题讨论】:

  • 点赞:SELECT videoCount, SessionCount FROM (select count(*) AS VideoCount from video where monthname(views) = 'May') AS VideoStats CROSS JOIN (select sum(sessions) AS SessionCount from user where user_id = 6) AS UserStats?

标签: mysql sql sql-view


【解决方案1】:

如果您希望结果在单独的列中彼此相邻,您可以简单地SELECT 查询列表:

SELECT ( select count(*) from video where monthname(views) = 'May') AS May_CT
      ,( select sum(sessions) from user where user_id = 6) AS User_Sum

如果您希望将结果堆叠在一列中:

select count(*) from video where monthname(views) = 'May'
UNION  ALL
select sum(sessions) from user where user_id = 6

后者可能需要数据类型转换

【讨论】:

  • 这确实回答了与他们的特定查询一起提出的问题,但我会指出此答案中的第一个查询仅适用于产生单列的子查询。这并没有以通用的方式回答“将两个不相关查询的结果合并到一个视图中”的问题。
【解决方案2】:
SELECT t2.total_session,
       t1.watch_count
FROM
  (SELECT 1 AS common_key,
          count(*) AS watch_count
   FROM video
   WHERE monthname(views) = 'May') AS t1
JOIN
  (SELECT 1 AS common_key,
               sum(sessions) AS total_session
   FROM USER
   WHERE user_id = 6) AS t2 ON t1.common_key = t2.common_key;

当然,这只有在 t1 和 t2 的输出都是一行时才会非常有效。

【讨论】:

  • 为什么输出会不止一行?他们都将所有内容聚合成一个结果,因为没有 GROUP BY
  • 为什么需要common_key 字段?如果您省略 ON 子句,您将得到一个完整的交叉产品。你也可以使用CROSS JOIN
  • 我只是在一般情况下解释:)
  • 是的,你可以,只写我觉得更好的。
猜你喜欢
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
相关资源
最近更新 更多