2017-07-14 40 views
0

我具有包含以下字段的表:Mysql的总量可达只使用一个表中的每个奖杯条目

ID,奖杯,登记

每一行是一个表决所以例如:

32, 1, hk57 hxz 
33, 1, hk57 hxz 
34, 1, sj2 ghd 
35, 2, hk57 hxz 
36, 2 sj2 ghd 

这将是2票的车hk57 hxz赢得奖杯1和1投票的车sj2 ghd赢得奖杯1和两辆车都有一票每个奖杯2

如何写一个查询y总计每辆车对每个奖杯的票数?

或者换句话说,相同的注册与相同的奖杯相同的次数并显示奖杯?

+0

提示:'组by'和'count'。 –

+0

我必须在这里使用子查询吗? – user794846

回答

0

我没有办法现在就来试试这个权利,但我敢肯定,你只需要group by奖杯和count寄存器,是这样的:

SELECT trophy, registration, count(*) FROM your_table 
GROUP BY registration, trophy 
  • count(*)手段计数寄存器
  • group by手段“并通过此列他们组”

这里有一些参考:

https://dev.mysql.com/doc/refman/5.7/en/counting-rows.html

https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html


除了其他的答案,我会建议给别名您的COUNT(*)如果你需要这样的!

SELECT registration, trophy, count(*) as votes FROM your_table 
GROUP BY registration, trophy 

所以COUNT(*)列将被称为投票既然你想注册和奖杯的每对单独计数是漂亮

+0

这不会产生正确的结果。它只显示每个奖杯的计数,而不是每个奖杯的个人注册数。 – user794846

+0

对不起,我没有看到你需要注册,现在就试试吧! – criw

+0

是的,但它应该列出每个登记 – user794846

0
SELECT registration, COUNT(trophy) FROM table_name GROUP BY registration, trophy; 
+0

这不起作用 – user794846

+0

@ user794846,你有错误信息或者它不是你想要的结果吗? – user10089632

+0

查看上面的答案 – user794846

0

,在GROUP BY使用两列。

SELECT registration, trophy, COUNT(*) AS votes 
FROM yourTable 
GROUP BY registration, trophy 
ORDER BY trophy, registration 
+0

看起来回到前面,它应该列出每个登记计数的奖杯 – user794846

+0

您可以使用ORDER BY来控制它们的显示顺序。这仍然是相同的结果。 – Barmar

+0

是的,它似乎工作,但如果我改变它显示奖杯作为第一列失败。所以这将是:奖杯,登记,投票。 – user794846

0

您需要通过奖杯和注册进行分组。

SELECT count(*) as TotalVotes, trophy, registration FROM your_table 
GROUP BY trophy, registration 

结果将是如下:

TotalVotes | trophy | registration 
     2  | 1 | hk57 hxz 
     1  | 1 | sj2 ghd 
     1  | 2 | sj2 ghd 
     1  | 2 | hk57 hxz 
相关问题