简体   繁体   English

MySQL-如何获取重复项的相邻字段之和

[英]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 ALLGroup 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM