因此,假设我们有以下数据表:
A | B
_________
1 | 2
3 | 4
5 | 6
6 | 5
如果我想计算相同数字相撞或在同一行的次数,该怎么办?因此,在上面的示例中,1-2和3-4将返回计数1,因为它们只在同一行上出现一次,但是5-6和6-5将返回值2。
一个更真实的例子:假设这些数字是运动队的id,A和B列决定了主队和客队。Ao 5队和6队共进行了2场比赛,先是5队作为主机,然后是6队作为主机。
那么我如何在mysql中计算这些值呢?
发布于 2013-05-17 08:20:13
DROP TABLE IF EXISTS fixtures;
CREATE TABLE fixtures
(fixture_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,home INT NOT NULL
,away INT NOT NULL
);
INSERT INTO fixtures (home,away) VALUES (1,2),(3,4),(5,6),(6,5);
SELECT * FROM fixtures;
+------------+------+------+
| fixture_id | home | away |
+------------+------+------+
| 1 | 1 | 2 |
| 2 | 3 | 4 |
| 3 | 5 | 6 |
| 4 | 6 | 5 |
+------------+------+------+
SELECT LEAST(home,away) a,GREATEST(home,away) b, COUNT(*) ttl FROM fixtures GROUP BY a,b;
+---+---+-----+
| a | b | ttl |
+---+---+-----+
| 1 | 2 | 1 |
| 3 | 4 | 1 |
| 5 | 6 | 2 |
+---+---+-----+
发布于 2013-05-17 06:23:32
由于a-b与b-a相同,因此需要对结果进行规范化:
SELECT LEAST(a,b) AS x, GREATEST(a,b) AS y ...
现在可以计算出现的次数了:
SELECT LEAST(a,b) AS x, GREATEST(a,b) AS y, count(*) as c FROM tablename GROUP BY x,y
问候
发布于 2013-05-17 07:26:06
SELECT
CASE WHEN A < B THEN A ELSE B END AS aa,
CASE WHEN B > A THEN B ELSE A END AS bb,
COUNT(*)
FROM
Table1 t1
GROUP BY aa, bb
在sqlfiddle中观看实况。
https://stackoverflow.com/questions/16598114
复制相似问题