有一个名为 m_techno_idea(存储想法)、m_techno_idea_moderator_vote(主持人投票)和 m_techno_idea_user_vote(用于用户投票)的表。用户投票只有 1,而主持人投票在 1 -5 之间,并存储在名为 votes 的列中。所以我需要得到总数。单个查询中的投票数。我不想要嵌套查询。
我的尝试:
尝试1:
SELECT
COUNT(DISTINCT TIUV.PK_ID) + IFNULL((SUM(TIMV.VOTES)),0) AS VOTES
FROM
M_TECHNO_IDEA TI
LEFT OUTER JOIN
M_TECHNO_IDEA_MODERATOR_VOTE TIMV
ON
TIMV.FK_TECHNO_IDEA_ID=TI.PK_ID
LEFT OUTER JOIN
M_TECHNO_IDEA_USER_VOTE TIUV
ON
TIUV.FK_TECHNO_IDEA_ID=TI.PK_ID
WHERE
TI.PK_ID=2
这里 distinct 关键字可以帮助我为用户投票设置不同的行,但对于主持人投票,我不能使用 distinct,因为多行中的投票可以相同。这给了我错误的结果。
尝试2:
SELECT (select count(TIUV.PK_ID) FROM M_TECHNO_IDEA_USER_VOTE TIUV
WHERE TIUV.FK_TECHNO_IDEA_ID=2) +
(select sum(TIMV.VOTES) FROM M_TECHNO_IDEA_moderator_VOTE TIMV
WHERE TIMV.FK_TECHNO_IDEA_ID=2) AS VOTES
尝试 2 给了我正确的结果,但查询看起来不太好。我也尝试过 group by ,但它也没有帮助我。任何帮助将不胜感激。
尝试 3:
SELECT
COUNT(DISTINCT TIUV.PK_ID) + IFNULL(MODVOTES.VOTES, 0) AS VOTES
FROM
(SELECT
TIMV.FK_TECHNO_IDEA_ID, SUM(TIMV.VOTES) VOTES
FROM
M_TECHNO_IDEA_MODERATOR_VOTE TIMV
GROUP BY TIMV.FK_TECHNO_IDEA_ID) MODVOTES
LEFT OUTER JOIN
M_TECHNO_IDEA_USER_VOTE TIUV ON TIUV.FK_TECHNO_IDEA_ID = MODVOTES.FK_TECHNO_IDEA_ID
WHERE
TIUV.FK_TECHNO_IDEA_ID = 2
这次尝试也给了我正确的结果。我不得不放置一个嵌套的子查询。如果有更好的解决方案,将不胜感激。