从我的表格中我希望按类别显示比率。 我写了一个代码,它显示了我所有的比例,并且我被卡住了 将它拆分为不同的categories_id
这是我的代码
SELECT (b.t1/a.t2) as r
FROM
(
SELECT avg(items*value) AS T1
FROM table1
WHERE YEAR(data) = 2001
) a,
(
SELECT avg(items*value) AS T2
FROM table1
WHERE YEAR(data) = 2002
) b
EDIT 我使用ms sql server
╔═════════════╤════════════╤═══════╤═══════╗
║ category_id │ data │ items │ value ║
╠═════════════╪════════════╪═══════╪═══════╣
║ 1 │ 2001-02-02 │ 1 │ 5.5 ║
╟─────────────┼────────────┼───────┼───────╢
║ 1 │ 2001-02-03 │ 2 │ 6.1 ║
╟─────────────┼────────────┼───────┼───────╢
║ 1 │ 2001-02-01 │ 3 │ 4.3 ║
╟─────────────┼────────────┼───────┼───────╢
║ 2 │ 2001-02-01 │ 2 │ 2.2 ║
╟─────────────┼────────────┼───────┼───────╢
║ 2 │ 2001-02-02 │ 5 │ 2.3 ║
╚═════════════╧════════════╧═══════╧═══════╝
结束想要在2001年收到t1为avg(项目值)的位置,并且2002年t2为avg(项目值)
╔═════════════╤═══════════════╗
║ category_id │ ratio (t1/t2) ║
╠═════════════╪═══════════════╣
║ 1 │ 12.2 ║
╟─────────────┼───────────────╢
║ 2 │ 10.1 ║
╟─────────────┼───────────────╢
║ 3 │ 111.1 ║
╟─────────────┼───────────────╢
║ 4 │ 222.8 ║
╟─────────────┼───────────────╢
║ 5 │ 333.9 ║
╚═════════════╧═══════════════╝
答案 0 :(得分:0)
在“a table”(2001年)和“b table”(2002年)中,它会返回一行一列:所有内容的平均值。
我的猜测是在那些子查询中,你需要得到你想要的平均值然后你会得到你想要的比率。您需要按categories_id进行分组,并获得每年每个categories_id的平均值。
答案 1 :(得分:0)
试试这个
Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(latlongshrink);
while(m.find()) {
Log.e("Test",""+m.group(1));
latlongshrink = m.group(1);
}
我认为所有类别在2001年和2002年都没有必要的价值。
如果您知道所有年份都存在所有类别,您可以缩短它:
SELECT T.category_id, (T1.av/T2.av) AS ratio
FROM
(
SELECT DISTINCT category_id FROM table1
) T
LEFT JOIN
(
SELECT category_id, avg(items*value) AS av
FROM table1
WHERE YEAR(data) = 2001
GROUP BY category_id
) T1 ON T.category_id=T1.category_id
LEFT JOIN
(
SELECT category_id, avg(items*value) AS av
FROM table1
WHERE YEAR(data) = 2002
GROUP BY category_id
) T2 ON T.category_id=T2.category_id
ORDER BY T.category_id