MySQL - 在两个group_by之后尝试两列的sum()
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL - 在两个group_by之后尝试两列的sum()相关的知识,希望对你有一定的参考价值。
最近我一直在尝试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。
答案
我宁愿首先将这两个表联合起来然后聚合:
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;
以上是关于MySQL - 在两个group_by之后尝试两列的sum()的主要内容,如果未能解决你的问题,请参考以下文章
在 codeigniter 中使用 group_by 获取最新数据