1

我想得到每个披萨的总分。因此,例如,焦糖洋葱应该有 12 分,早餐应该有 5 分。

SQLFIDDLE链接在这里。这是 MySQL 查询:

选择 Pizza_table.name、results_table.first_pick_points 作为积分
从结果表,比萨表
WHERE results_table.first_pick = Pizza_table.id
联盟
选择 Pizza_table.name、results_table.second_pick_points
从结果表,比萨表
WHERE results_table.second_pick = Pizza_table.id
联盟
选择 Pizza_table.name、results_table.third_pick_points
从结果表,比萨表
WHERE results_table.third_pick = Pizza_table.id
联盟
选择 Pizza_table.name,results_table.fourth_pick_points
从结果表,比萨表
WHERE results_table.fourth_pick = Pizza_table.id
联盟
选择 Pizza_table.name、results_table.fifth_pick_points
从结果表,比萨表
WHERE results_table.fifth_pick = Pizza_table.id

这些是当前的结果:

名称点
焦糖洋葱 5
布法罗翼 5
焦糖洋葱 5
BM² 4
自卫队 4
查科 4
早餐 3
查科 3
芝士面包 3
卡林 2
焦糖洋葱 2
鸡肉培根牧场 2
布法罗翼 1
早餐 1
早餐 1

这是我想要返回的:

名称点
焦糖洋葱 12
查科 7
布法罗翼 6
早餐 5
BM² 4
自卫队 4
芝士面包 3
卡林 2
鸡肉培根牧场 2

如何达到我想要的结果?

4

3 回答 3

1

您将需要使用聚合,但似乎您需要更改查询以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

请参阅SQL Fiddle with Demo

请注意,我还调整了您的查询以使用 ANSI JOIN 语法 ( INNER JOIN)。

于 2013-03-31T20:33:27.643 回答
0

// 一个简单的 group by 应该做你想做的事:

SELECT name, SUM(points) AS points
FROM   table_name
GROUP BY name;
于 2013-03-31T20:33:27.073 回答
0

您应该在结尾处使用UNION ALLwithGroup by子句 - 还添加了SUM

工作小提琴: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
于 2013-03-31T20:34:34.210 回答