次のようなテーブルがあります。
これを取得するクエリの書き方
使用しているデータベース製品を指定しませんでしたが、どのデータベースでも CASE 式で集計関数を使用して結果を取得できるはずです。
select subject,
sum(case when marks > 10 and marks <= 40 then 1 else 0 end) Range10_40,
sum(case when marks > 40 and marks <= 60 then 1 else 0 end) Range40_60
from yt
group by subject;
デモで SQL Fiddle を参照してください
このクエリを試してください
Mysql の場合
SELECT
subject,
sum(if(marks between 10 and 40, 1, 0)) as '(10-40)',
sum(if(marks between 40 and 60, 1, 0)) as '(40-60)'
FROM
tbl
GROUP BY
subject
このようなものはうまくいくと思います...
SELECT t.`subject`,
(SELECT COUNT(*) FROM `subject` as t2 WHERE t2.`range` BETWEEN (10 AND 40) AND t2.`subject` = t.`subject`) as `range1040`,
(SELECT COUNT(*) FROM `subject` as t2 WHERE t2.`range` BETWEEN (40 AND 60) AND t2.`subject` = t.`subject`) as `range4060`
FROM `table` as t
GROUP BY t.`subject`
ORDER BY t.`subject`