希望结合max(或min)对组进行一些澄清

时间:2013-10-13 01:19:11

标签: mysql group-by max

我有一个用户数据点表,我正在尝试使用group by,min和case来转移它。

所以..

的user_data:

user_id | data_type_id | value
1       |    1         |    'Joe'
1       |    2         |    'Blow'
2       |    1         |    'Mary'
2       |    2         |    'Jones'


select 
max( case when data_type_id = 1 then value end) as 'firstName',
max( case when data_type_id = 2 then value end) as 'lastName' 

from user_data group by user_id

这种'排序'是有效的,除非通常值为NULL,即使*是数据集中的那些数据类型的值,如果我删除组和最大值

我正在努力了解幕后发生的事情,因为它非常令人困惑。 group by看起来每个用户只有一行(我不确定它是如何决定哪一行......可能是第一行?)但是不知怎的,case语句设法找到了不属于行的信息没有显示出来。

我真的很感激帮助理解这里发生的事情,以便我能够获得我实际寻求的数据。

2 个答案:

答案 0 :(得分:1)

您要做的是将行( data_type_id )转置到列中。执行以下语句时,

SELECT user_id,
       CASE WHEN data_type_id = 1 THEN value END  firstName,
       CASE WHEN data_type_id = 2 THEN value END  lastName 
FROM   TableName 

它会给你以下结果,

╔═════════╦═══════════╦══════════╗
║ USER_ID ║ FIRSTNAME ║ LASTNAME ║
╠═════════╬═══════════╬══════════╣
║       1 ║ Joe       ║ (null)   ║
║       1 ║ (null)    ║ Blow     ║
║       2 ║ Mary      ║ (null)   ║
║       2 ║ (null)    ║ Jones    ║
╚═════════╩═══════════╩══════════╝

请注意,如果(null)语句中的条件不符合,则值为CASE

为了将user_id分类为每个组的行并消除这些null值,聚合函数MAX()应用于行:firstname和{{1 }}。

lastname

因此给你以下结果,

SELECT user_id,
       MAX(CASE WHEN data_type_id = 1 THEN value END)  firstName,
       MAX(CASE WHEN data_type_id = 2 THEN value END)  lastName 
FROM   TableName 
GROUP  BY user_id

答案 1 :(得分:0)

select 
max( case when data_type_id = 1 then value else '' end) as 'firstName',
max( case when data_type_id = 2 then value else '' end) as 'lastName' 

from user_data group by user_id

可能会得到你想要的东西