简体   繁体   中英

mysql | Group and count rows

I have a table and would like to calculate values. My table:

Table votes

vote   type
1      1
-1     1
1      0
-1     0
1      0
-1     1
1      0

Vote: -1 - Down; +1 - Up;

I would like to get something like this:

Count votes up type 1: 1
Count votes down type 1: 2

Votes up type 0: 3
Votes down type 0: 1

Sum votes type 1: 1+(-1)+(-1) = -1
Sum votes type 0: 1+(-1)+1+1 = 2

Is it possible to get results from mysql using single query? Thanks!

I guess your problem is how to distinct up and down votes here.

You want to group by type (which sounds like a vote/poll ID) and then just pick up and down votes. It can be done using CASE or IF in combination with COUNT or SUM .

COUNT does not count NULL values so I suggest to wrap two COUNT s in IF s.

SELECT
type,
COUNT(IF(vote = -1, TRUE, NULL)) AS down,
COUNT(IF(vote = 1, TRUE, NULL)) AS up
FROM votes
GROUP BY type

SQL Fiddle: http://sqlfiddle.com/#!2/36008/1/0

you can write

select count(*) from table where type = 1 and vote = -1


select count(*) from table where type = 1 and vote = 1

the above will give you the result count which you want .

这会工作

  select sum(vote),type from table group by type;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM