如何显示类别(SQL)

时间:2018-04-26 13:15:20

标签: sql sql-server

从我的表格中我希望按类别显示比率。 我写了一个代码,它显示了我所有的比例,并且我被卡住了 将它拆分为不同的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         ║
╚═════════════╧═══════════════╝

2 个答案:

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