MySQL - 在两个group_by之后尝试两列的sum()

问题描述 投票:0回答:1

最近我一直在尝试group_by 2列,然后将它们加在一起。我找到了答案,我希望在特定情况下与您分享。随意发布另一种解决方案。

这是我的数据库表:

CREATE TABLE vote
(
    id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    firstName VARCHAR(50) NOT NULL,
    lastName VARCHAR(50) NOT NULL,
    email VARCHAR(100),
    prefix VARCHAR(20),
    isSchool TINYINT(1) NOT NULL,
    schoolName VARCHAR(100),
    choix1 INT(30) NOT NULL,
    choix2 INT(30) NOT NULL,
    dateVote INT(50) NOT NULL,
    choix1score DECIMAL(3,2) NOT NULL,
    choix2score DECIMAL(3,2) NOT NULL
);
CREATE UNIQUE INDEX id ON vote (id)

这是我的解决方案的查询:

SELECT 
    query.choix as choix, SUM(query.result) as result
FROM
    (SELECT 
         choix2 as choix, SUM(choix2score) AS result 
     FROM 
         vote
     GROUP BY 
         choix2

     UNION ALL

     SELECT 
         choix1, SUM(choix1score) AS result 
     FROM 
         vote
     GROUP BY 
         choix1) AS query
GROUP BY 
    choix
ORDER BY 
    result DESC

这是什么?它是投票应用程序的数据库。用户可以投票选出他最喜欢的两部电影,并且根据用户在我的网站上是否有帐户或者是匿名的,投票得分将是2和1,或0.5和0.25。我需要通过将来自choice1的所有点分组,将所有点从choice2分组,然后将它们加在一起来获得总点数。所以,如果你像我一样,并且你寻求快速解决方案,这个查询工作得很好。但是,有更好的解决方案吗?

谢谢你,Devoplex。

mysql sql group-by sum multiple-columns
1个回答
1
投票

我宁愿首先将这两个表联合起来然后聚合:

select choix, sum(choixscore) as result
from
(
  select choix1 as choix, choix1score as choixscore from vote
  union all
  select choix2 as choix, choix2score as choixscore from vote
) all_scores
group by choix
order by result desc;
© www.soinside.com 2019 - 2024. All rights reserved.