gpt4 book ai didi

mysql - 非常复杂的选择

转载 作者:行者123 更新时间:2023-11-29 00:36:25 24 4
gpt4 key购买 nike

我想在更多表(4 个以上)之间执行复杂的 SELECT,以对项目进行排序和计数。

到目前为止,这是我的台词:

SELECT
myl_u.id,
myl_u.label_real_address,
myl_u.ext,
COUNT(myc_c.contact_id),
COUNT(myl_r_c.release_id)
FROM
myl_users myl_u
LEFT JOIN myc_contacts myc_c ON myc_c.contact_type='l' AND myc_c.contact_id=myl_u.id
LEFT JOIN myl_releases myl_r ON myl_r.id=myl_u.id
LEFT JOIN myl_r_comments myl_r_c ON myl_r.release_id=myl_r_c.release_id
GROUP BY myl_u.label_real_address
ORDER BY COUNT(myc_c.contact_id) DESC

它只工作了一半,但是当我添加 SQL 的后半部分时,它显示了意想不到的值,而且不知何故它也加倍了。

基本上我有 myl_users(唱片公司的集合)myc_contacts(一个用户有多少个收藏夹,contact_type='l'表示是关于myl_users而不是其他表)myl_releases 包含音乐发布(如 EP、专辑,具有唯一 ID和 myl_r_comments 包含普通用户对这些版本所做的评论。

我设法按唱片公司有多少个收藏夹(15、14、10、8..)进行排序 - COUNT(myc_c.contact_id) 子句

但是当我添加下一个子句并使查询更大以按标签发布的评论总数排序时,出现意外情况。

有人能指出我正确的方法吗?

我会根据您的需要评论和调整/澄清问题。

谢谢,新年快乐

最佳答案

问题是您要沿多个维度求和,因此您得到的是叉积。最好的方法是沿着每个维度独立总结:

SELECT myl_u.id, myl_u.label_real_address, myl_u.ext, 
sum(myc_c.cnt),
sum(myl_rc.cnt)
FROM myl_users myl_u LEFT JOIN
(select contact_id, count(*) as cnt
from myc_contacts myc_c
where myc_c.contact_type='l'
group by contact_id
) myc_c
ON myc_c.contact_id=myl_u.id LEFT JOIN
(select myl_r.id, count(*) as cnt
from myl_releases myl_r LEFT JOIN
myl_r_comments myl_r_c
ON myl_r.release_id=myl_r_c.release_id
gropu by myl_r.id
) myl_rc
ON myl_rc.id=myl_u.id
GROUP BY myl_u.id, myl_u.label_real_address, myl_u.ext
ORDER BY 4 DESC

从问题中不清楚是否需要最后的group by。如果 myl_u 表中没有重复项,则根本不需要外部聚合。

关于mysql - 非常复杂的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14093213/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com