使用另一列

时间:2017-03-20 23:35:35

标签: mysql

如果你能帮我解释语法,我需要以下内容 我有一个包含2个字段ID和优先级的表,如下所示:

ID | Priority |
---------------
101| 1 |
105| 2 |
200| 3 |
104| 4 |
400| 5 |
400| 1 |
102| 2 |
120| 3 |
150| 4 |
210| 5 |
109| 1 |
104| 2 |
200| 3 |
105| 4 |
250| 5 |

我需要的是这个结果(最好)

ID  |TP1|TP2|TP3|TP4|TP5|
-------------------------
101 | 1 |   |   |   |   |
102 |   | 1 |   |   |   |
104 |   | 1 |   | 1 |   |
105 |   | 1 |   | 1 |   |
109 | 1 |   |   |   |   |
120 |   |   | 1 |   |   |
150 |   |   |   | 1 |   |
200 |   |   | 2 |   |   |
250 |   |   |   |   | 1 |
400 | 1 |   |   |   | 1 |

至少这一个:

ID | P | T |
------------
101| 1 | 1 |
102| 2 | 1 |
104| 2 | 1 |
104| 4 | 1 |
105| 2 | 1 |
105| 4 | 1 |
109| 1 | 1 |
120| 3 | 1 |
150| 4 | 1 |
200| 3 | 2 |
250| 5 | 1 |
400| 1 | 1 |
400| 5 | 1 |

对不起。我没有复制这部分内容。

该表有一堆ID,每个都有一个优先级(从1到5)。我需要的是计算任何ID使用优先级1,优先级2等的次数

如果你看ID 200出现2次优先3 提前感谢任何暗示。

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

SELECT ID, SUM(IF(Priority = 1, 1, 0)) TP1, SUM(IF(Priority= 2, 1, 0)) TP2, SUM(IF(Priority = 3, 1, 0)) TP3, SUM(IF(Priority = 4, 1, 0)) TP4, SUM(IF(Priority= 5, 1, 0)) TP5 FROM `tab1` GROUP BY ID

答案 1 :(得分:0)

试试这个:

select   id,
         count(case when Priority = 1 then 1 else null end) as TP1,       
         count(case when Priority = 2 then 1 else null end) as TP2,       
         count(case when Priority = 3 then 1 else null end) as TP3,       
         count(case when Priority = 4 then 1 else null end) as TP4,       
         count(case when Priority = 5 then 1 else null end) as TP5
from     your_table
group by id