1

我必须在php中显示一些数据数据的结构是这样的

id  channel_id  added_by

1     1          9999
2     1          195
3     8          9999
4     1          180
5     1          195
6     8          9999
7     1          9999
8     1          195
9     8          9999

我只需要像这样显示频道 id = 1 的总数

channel_id   total  added_by

1            2           9999
1            4          -1

由 9999 和所有其他添加的所有通道 id 的类似计数假定为 (-1)

我能做到

SELECT channel_id, added_by, sum(id) as total 
from table 
where channel_id = 1 
group by channel_id  ,added_by;

但它给出了以下结果,这不是我需要的

channel_id  added_by total 
1            9999      2
1             195      3
1             180      1
4

4 回答 4

2

使用CASE..WHEN表达式,您可以确定一个“修改后的”added_by值,并GROUP BY以修改后的值代替。

此外,SUM(id)不会给你正确的行数。它宁愿将这些id值相加。您可以COUNT(*)改为使用来计算行数:

SELECT channel_id, 
       CASE 
         WHEN added_by <> 9999 THEN -1 
         ELSE 9999 
       END AS modified_added_by, 
       COUNT(*) as total 
FROM your_table_name 
WHERE channel_id = 1 
GROUP BY channel_id, modified_added_by

结果

| channel_id | modified_added_by | total |
| ---------- | ----------------- | ----- |
| 1          | -1                | 4     |
| 1          | 9999              | 2     |

在 DB Fiddle 上查看

于 2018-11-12T13:03:11.343 回答
1

希望这会帮助你。

SELECT count(*) as total, channel_id, added_by from table group by channel_id, added_by;

于 2018-11-12T13:21:15.427 回答
1

http://sqlfiddle.com/#!9/437406/2

SELECT channel_id,
       IF(added_by=9999,9999,-1) new_col,
       COUNT(*)
FROM `table`
GROUP BY channel_id, new_col
于 2018-11-12T14:14:15.233 回答
0

你可以试试这个:

SELECT channel_id,
if(9999,9999,-1) as added_by,
sum(id) as total
from table
where channel_id = 1
group by channel_id,added_by;
于 2018-11-12T13:08:58.400 回答