Mysql结合行?

时间:2011-04-05 10:36:17

标签: mysql

我有一个带有itemid | fieldid |值的表,我正在尝试设置一个查询,它将组合一些数据并返回mathc百分比以及结果。例如,某些数据可能是

itemid  fieldid value  
19  193 1  
45  193 1  
37  201 6  
25  201 1  
45  201 6  
19  201 6  
19  201 5 

现在我想要例如获取fieldid = 193 AND value = 1的所有行以及fieldid = 201 AND value = 6的行。理想的结果如下: itemid,匹配两个条件的所有itemid的百分比为100%,匹配一个的所有itemid的百分比为50%。我有这个查询用于上面的多列,但它不会在这里工作

select id,user_class,admin, ( 
if (admin = 1,1,0)+ 
if (user_class = 'SA',1,0)
)/2*100 as the_percent 
from users 
WHERE
admin = 1 OR user_class = 'P'
GROUP BY id
order by the_percent DESC

我还得到以下绝对匹配

SELECT users.id FROM users WHERE
users.id IN 
(
SELECT DISTINCT itemid FROM extra_field_values 
INNER JOIN (SELECT DISTINCT itemid FROM extra_field_values WHERE fieldid = 201 AND value = 6 ) a1 USING (itemid)
INNER JOIN (SELECT DISTINCT itemid FROM extra_field_values WHERE fieldid = 193 AND value = 1 ) a2 USING (itemid)
)

但将两者结合起来对我来说似乎有些困惑

1 个答案:

答案 0 :(得分:1)

我认为您可以使用UNION并从table subquery中选择以实现此目的。也许有些事情如下:

SELECT itemid, count(*)/2*100 AS percent FROM
    ( SELECT itemid FROM extra_field_values WHERE fieldid = 201 AND value = 6
    UNION ALL
    SELECT itemid FROM extra_field_values WHERE fieldid = 193 AND value = 1 ) AS t
GROUP BY itemid;

我已经有一段时间了,因为我在mysql中做了很多复杂的事情,我把它放在记事本中,所以我的语法可能会关闭:)但基本上我们创建一个匹配id的视图,然后从该表创建我们的统计数据。 (你也想做一些性能评估,看看它与多个查询相比如何叠加)。