Mysql 如何复制列
我需要返回这个查询的笛卡尔乘积和一个新列,该列计算count列的平均值Mysql 如何复制列,mysql,sql,Mysql,Sql,我需要返回这个查询的笛卡尔乘积和一个新列,该列计算count列的平均值 select site_topics.description as topic, site_subscriptions.site_user_id as user1, count(*) as count1 from ( (site_topics_to_subscriptions inner join site_subscriptions on site_subscriptions.id = site
select site_topics.description as topic,
site_subscriptions.site_user_id as user1,
count(*) as count1
from (
(site_topics_to_subscriptions
inner join site_subscriptions
on site_subscriptions.id = site_subscription_id)
inner join site_topics
on site_topics.id = site_topics_to_subscriptions.topic_id
)
group by user1,topic
order by user1, count1 desc;
目前的结果:
期望输出
“Average”一列,将较小的计数与该行较大的计数进行比较。同样,相同的行也不成对。也就是说,不会有user1=1和user2=1的行。一般结构应该是:
SELECT q1.user AS user1, q1.count AS count1, q2.user AS user2, q2.count AS count2, GREATEST(q1.count, q2.count)/LEAST(q1.count, q2.count) AS average
FROM (your query here) AS q1
JOIN (your query here) AS q2
ON q1.user < q2.user AND q1.topic = q2.topic
然后将获取原始表的查询放在此处代替查询。创建一个执行原始查询的视图可能会有所帮助,这样您就不必在叉积中重复整个过程。这是一个非常独特的平均值定义。您在20分钟前问了同样的问题:@Barmar这是该问题的重复吗?这是另一个问题。请阅读这两个问题,并停止将其标记为重复。您正在尝试将用户从行移动到列。这就是旋转。啊,我误解了你在做什么。我不得不将第一个q2.count改为q1.count,其中q1.topic=q2.topic;而且它工作得很好。我也会将原始查询放入视图中。非常感谢你的回答
-----------------------------------------------------
topic |user1 |count1 |user2 |count2 |Average
-----------------------------------------------------
Gaming |1 |3 |2 |2 |0.66
Photography |1 |3 |2 |1 |0.33
Art |1 |1 |2 |0 |0
Gaming |2 |2 |1 |3 |0.66
Photography |2 |1 |1 |3 |0.33
SELECT q1.user AS user1, q1.count AS count1, q2.user AS user2, q2.count AS count2, GREATEST(q1.count, q2.count)/LEAST(q1.count, q2.count) AS average
FROM (your query here) AS q1
JOIN (your query here) AS q2
ON q1.user < q2.user AND q1.topic = q2.topic