在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
答案 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