在MySQL中在两个表之间合并一列
这是我上周问的一个问题的继续。它涉及来自两个不同表的表列的组合 请考虑这个例子。 我有一个表(投票顺序a),其中包含以下值:在MySQL中在两个表之间合并一列,mysql,Mysql,这是我上周问的一个问题的继续。它涉及来自两个不同表的表列的组合 请考虑这个例子。 我有一个表(投票顺序a),其中包含以下值: +----------------+---------------------+----------------+ | VOTE_CANDIDATE | RANKED_CHOICE_VOTES | ORIGINAL_VOTES | +----------------+---------------------+----------------+ |
+----------------+---------------------+----------------+
| VOTE_CANDIDATE | RANKED_CHOICE_VOTES | ORIGINAL_VOTES |
+----------------+---------------------+----------------+
| 2 | 4 | 0 |
| 3 | 1 | 0 |
| 4 | 2 | 0 |
| 5 | 1 | 0 |
+----------------+---------------------+----------------+
SELECT vote_candidate, COUNT(*) ranked_choice_votes, 0 original_votes
FROM vote_orders a
INNER JOIN
(
SELECT vote_id, MIN(vote_order) AS min_vote_order
FROM vote_orders
WHERE vote_candidate NOT IN (1,6)
GROUP BY vote_id
) b
ON a.vote_id = b.vote_id
AND a.vote_order = b.min_vote_order
INNER JOIN
(
SELECT vote_id
FROM vote_orders
WHERE vote_candidate = 1
AND vote_order = 1
) c
ON a.vote_id = c.vote_id
GROUP BY vote_candidate;
+----------------+
| ORIGINAL_VOTES |
+----------------+
| 1 |
| 2 |
| 4 |
| 2 |
+----------------+
SELECT COUNT(*) original_votes
FROM vote_orders
WHERE vote_order = 1
AND vote_candidate NOT IN (1,6)
GROUP BY vote_candidate;
我有另一个表(投票顺序)包含以下值:
+----------------+---------------------+----------------+
| VOTE_CANDIDATE | RANKED_CHOICE_VOTES | ORIGINAL_VOTES |
+----------------+---------------------+----------------+
| 2 | 4 | 0 |
| 3 | 1 | 0 |
| 4 | 2 | 0 |
| 5 | 1 | 0 |
+----------------+---------------------+----------------+
SELECT vote_candidate, COUNT(*) ranked_choice_votes, 0 original_votes
FROM vote_orders a
INNER JOIN
(
SELECT vote_id, MIN(vote_order) AS min_vote_order
FROM vote_orders
WHERE vote_candidate NOT IN (1,6)
GROUP BY vote_id
) b
ON a.vote_id = b.vote_id
AND a.vote_order = b.min_vote_order
INNER JOIN
(
SELECT vote_id
FROM vote_orders
WHERE vote_candidate = 1
AND vote_order = 1
) c
ON a.vote_id = c.vote_id
GROUP BY vote_candidate;
+----------------+
| ORIGINAL_VOTES |
+----------------+
| 1 |
| 2 |
| 4 |
| 2 |
+----------------+
SELECT COUNT(*) original_votes
FROM vote_orders
WHERE vote_order = 1
AND vote_candidate NOT IN (1,6)
GROUP BY vote_candidate;
现在,我想合并这两个表,使生成的表如下所示(注意,原始投票
现在包含投票顺序。原始投票
[second queries]内容):
我想它需要一个高级的UNION
和JOIN
组合,但我就是不知道如何组合它们才能得到这个结果。你可以用它来做这个实验。
如果有任何关于如何解决这个问题的想法,我将不胜感激。啊,我想我现在知道你想要什么了 可能只需添加另一个子查询即可获得每个候选人的主要投票数。然后在投票候选人字段中,将此结果与其他结果合并
SELECT a.vote_candidate, COUNT(*) ranked_choice_votes, d.original_votes
FROM vote_orders a
INNER JOIN
(
SELECT vote_id, MIN(vote_order) AS min_vote_order
FROM vote_orders
WHERE vote_candidate NOT IN (1,6)
GROUP BY vote_id
) b
ON a.vote_id = b.vote_id
AND a.vote_order = b.min_vote_order
INNER JOIN
(
SELECT vote_id
FROM vote_orders
WHERE vote_candidate = 1
AND vote_order = 1
) c
ON a.vote_id = c.vote_id
LEFT OUTER JOIN
(
SELECT vote_candidate, COUNT(*) AS original_votes
FROM vote_orders
WHERE vote_order = 1
GROUP BY vote_candidate
) d
ON a.vote_candidate = d.vote_candidate
GROUP BY vote_candidate;
啊-你是救世主。我已经在互联网上搜索过这个解决方案。我将深入研究这方面的基本原理,以便从中学习一两件事。:)