[英]MySQL - How to get sum of duplicates' adjacent fields
I want to get the total points for each pizza. 我想获得每个披萨的总积分。 So, for example, Caramelized Onion should have 12 points, and Breakfast should have five.
因此,例如,焦糖洋葱应得12分,早餐应得5分。
SQLFIDDLE link here. SQLFIDDLE 链接在这里。 Here is the MySQL query:
这是MySQL查询:
SELECT pizza_table.name, results_table.first_pick_points as points FROM results_table, pizza_table WHERE results_table.first_pick = pizza_table.id UNION SELECT pizza_table.name, results_table.second_pick_points FROM results_table, pizza_table WHERE results_table.second_pick = pizza_table.id UNION SELECT pizza_table.name, results_table.third_pick_points FROM results_table, pizza_table WHERE results_table.third_pick = pizza_table.id UNION SELECT pizza_table.name, results_table.fourth_pick_points FROM results_table, pizza_table WHERE results_table.fourth_pick = pizza_table.id UNION SELECT pizza_table.name, results_table.fifth_pick_points FROM results_table, pizza_table WHERE results_table.fifth_pick = pizza_table.id
These are the current results: 这些是当前结果:
NAME POINTS Caramelized Onion 5 Buffalo Wing 5 Caramelized Onion 5 BM² 4 asdf 4 Chaco 4 Breakfast 3 Chaco 3 Cheese Bread 3 The Karlyn 2 Caramelized Onion 2 Chicken Bacon Ranch 2 Buffalo Wing 1 Breakfast 1 Breakfast 1
This is what I would like returned: 这是我想返回的内容:
NAME POINTS Caramelized Onion 12 Chaco 7 Buffalo Wing 6 Breakfast 5 BM² 4 asdf 4 Cheese Bread 3 The Karlyn 2 Chicken Bacon Ranch 2
How do I achieve the results I want? 如何获得想要的结果?
You will need to use an aggregate but it also appears that you will need to change your query to use UNION ALL
between each query: 您将需要使用聚合,但似乎还需要更改查询以在每个查询之间使用
UNION ALL
:
select name, sum(points) Total
from
(
SELECT pizza_table.name, results_table.first_pick_points as points
FROM results_table
INNER JOIN pizza_table
ON results_table.first_pick = pizza_table.id
UNION ALL
SELECT pizza_table.name, results_table.second_pick_points
FROM results_table
INNER JOIN pizza_table
ON results_table.second_pick = pizza_table.id
UNION ALL
SELECT pizza_table.name, results_table.third_pick_points
FROM results_table
INNER JOIN pizza_table
ON results_table.third_pick = pizza_table.id
UNION ALL
SELECT pizza_table.name, results_table.fourth_pick_points
FROM results_table
INNER JOIN pizza_table
ON results_table.fourth_pick = pizza_table.id
UNION ALL
SELECT pizza_table.name, results_table.fifth_pick_points
FROM results_table
INNER JOIN pizza_table
ON results_table.fifth_pick = pizza_table.id
) d
group by name
order by total desc
See SQL Fiddle with Demo . 请参阅带有演示的SQL Fiddle 。
Note, I also adjusted your query to use ANSI JOIN syntax ( INNER JOIN
). 注意,我还调整了查询以使用ANSI JOIN语法(
INNER JOIN
)。
// A simple group by should do what you want: //一个简单的group by应该执行您想要的操作:
SELECT name, SUM(points) AS points
FROM table_name
GROUP BY name;
You should use UNION ALL
along with a Group by
clause at the end - Also added the use of SUM
您应该在最后使用
UNION ALL
和Group by
子句-还添加了SUM
的使用
Working fiddle: http://sqlfiddle.com/#!2/882e3/156 工作提琴: http ://sqlfiddle.com/#!2/882e3/ 156
Select name, SUM(points) From(
SELECT pizza_table.name, results_table.first_pick_points as points
FROM results_table, pizza_table
WHERE results_table.first_pick = pizza_table.id
UNION ALL
SELECT pizza_table.name, results_table.second_pick_points
FROM results_table, pizza_table
WHERE results_table.second_pick = pizza_table.id
UNION ALL
SELECT pizza_table.name, results_table.third_pick_points
FROM results_table, pizza_table
WHERE results_table.third_pick = pizza_table.id
UNION All
SELECT pizza_table.name, results_table.fourth_pick_points
FROM results_table, pizza_table
WHERE results_table.fourth_pick = pizza_table.id
UNION All
SELECT pizza_table.name, results_table.fifth_pick_points
FROM results_table, pizza_table
WHERE results_table.fifth_pick = pizza_table.id) x
Group by name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.