MySQL 对多列进行 GROUP BY 和 COUNT
MySQL GROUP BY and COUNT over Multiple Columns
我有一个MySQLTable如下:
+----+-------+-------+-------+-------+-------+
| ID | MON | TUE | WED | THU | FRI |
+----+-------+-------+-------+-------+-------+
| 0 | Bike | Bike | Walk | Bike | Car |
| 1 | Car | Car | Car | Bus | Car |
| 2 | Bus | Train | Bus | Bus | Train |
| 3 | Car | Car | Car | Walk | Car |
+----+-------+-------+-------+-------+-------+
我将如何分组并计算所有天数,以获得一周内每种交通工具的总模式。例如:
+--------+-------+
| MODE | COUNT |
+--------+-------+
| Bike | 3 |
| Bus | 4 |
| Car | 9 |
| Train | 2 |
| Walk | 2 |
+--------+-------+
我试过使用:
SELECT COUNT(*), Mon
FROM transport
GROUP BY Mon, Tue, Wed, Thu, Fri
但这会为每天的每个唯一值创建一个新组。
一种方法是生成一个子查询,使用 union all
运算符在一列中选择传输模式,然后计算出现次数:
SELECT mode, COUNT(*)
FROM (SELECT mon AS mode FROM transport UNION ALL
SELECT tue AS mode FROM transport UNION ALL
SELECT wed AS mode FROM transport UNION ALL
SELECT thu AS mode FROM transport UNION ALL
SELECT fri AS mode FROM transport) t
GROUP BY mode
如果您有单独的 table 模式,您还可以:
select m.mode, count(*)
from modes m join
transport t
on m.mode in (t.mon, t.tue, t.wed, t.thu, t.fri)
group by m.mode;
SELECT mode, COUNT(*)FROM(SELECT mon AS mode FROM transport UNION ALL
SELECT tue AS mode FROM transport UNION ALL
SELECT wed AS mode FROM transport UNION ALL
SELECT thu AS mode FROM transport UNION ALL
SELECT fri AS mode FROM transport) t
GROUP BY mode
我有一个MySQLTable如下:
+----+-------+-------+-------+-------+-------+
| ID | MON | TUE | WED | THU | FRI |
+----+-------+-------+-------+-------+-------+
| 0 | Bike | Bike | Walk | Bike | Car |
| 1 | Car | Car | Car | Bus | Car |
| 2 | Bus | Train | Bus | Bus | Train |
| 3 | Car | Car | Car | Walk | Car |
+----+-------+-------+-------+-------+-------+
我将如何分组并计算所有天数,以获得一周内每种交通工具的总模式。例如:
+--------+-------+
| MODE | COUNT |
+--------+-------+
| Bike | 3 |
| Bus | 4 |
| Car | 9 |
| Train | 2 |
| Walk | 2 |
+--------+-------+
我试过使用:
SELECT COUNT(*), Mon
FROM transport
GROUP BY Mon, Tue, Wed, Thu, Fri
但这会为每天的每个唯一值创建一个新组。
一种方法是生成一个子查询,使用 union all
运算符在一列中选择传输模式,然后计算出现次数:
SELECT mode, COUNT(*)
FROM (SELECT mon AS mode FROM transport UNION ALL
SELECT tue AS mode FROM transport UNION ALL
SELECT wed AS mode FROM transport UNION ALL
SELECT thu AS mode FROM transport UNION ALL
SELECT fri AS mode FROM transport) t
GROUP BY mode
如果您有单独的 table 模式,您还可以:
select m.mode, count(*)
from modes m join
transport t
on m.mode in (t.mon, t.tue, t.wed, t.thu, t.fri)
group by m.mode;
SELECT mode, COUNT(*)FROM(SELECT mon AS mode FROM transport UNION ALL
SELECT tue AS mode FROM transport UNION ALL
SELECT wed AS mode FROM transport UNION ALL
SELECT thu AS mode FROM transport UNION ALL
SELECT fri AS mode FROM transport) t
GROUP BY mode