MySQL查询优化(加入类似的查询结果)

时间:2012-02-24 17:33:23

标签: mysql sql join

在MySQL中我编写了以下查询。使用JOIN再次重新选择所有数据对我来说似乎不是最有效的方法。你会如何重写它以提高效率?

SELECT * FROM (
    SELECT COUNT(*) AS 'total' FROM `the_table`
    WHERE `subject_id`=7 ) a
JOIN (
    SELECT COUNT(*) AS 'unread' FROM `the_table`
    WHERE `subject_id`=7 AND `read`=0 ) b

修改

我正在尝试获得一个包含2列的表:'total'和'unread',其中一行具有INT值,例如

  

总计: 200 未读: 20

1 个答案:

答案 0 :(得分:6)

由于除了读取条件之外,where子句是相同的,因此可以使用SUM / CASE

 SELECT COUNT(*) AS 'total' , 
       SUM(CASE WHEN `read`=0 THEN 1 ELSE 0 END) as `unread`
 FROM `the_table`
 WHERE `subject_id`=7