我在这些列的表格中有一个数据结构
ID | Title | Category_level_1 | Category_level_2 | Category_level_3
1 | offer 1 | Browns | Greens | White
2 | offer 1 | Browns | White |
3 | offer 2 | Greens | Yellow |
4 | offer 3 | Browns | Greens |
5 | offer 4 | Browns | Yellow | White
如果无法更改表格结构,我需要“计算3列中每个类别的优惠数量”
还有提供日期范围的列,以限制当前的列,但我想首先计算出查询。
我需要获取所有类别的列表,然后针对它们提出要约。
优惠可以不止一次出现在桌面上。
据我所知,首先使用UNION进行临时表。
CREATE TEMPORARY TABLE IF NOT EXISTS Cats AS
( SELECT DISTINCT(opt) FROM (
SELECT Category_level_1 AS opt FROM a_table
UNION
SELECT Category_level_2 AS opt FROM a_table
UNION
SELECT Category_level_3 AS opt FROM a_table
) AS Temp
) ;
SELECT
Cats.opt AS "Joint Cat",
(
SELECT count(*)
FROM a_table
WHERE a_table.`Category_level_1` = Cats.opt
OR a_table.`Category_level_2` = Cats.opt
OR a_table.`Category_level_3` = Cats.opt
GROUP BY a_table.Title
) As Total
FROM Cats
WHERE Category_level_1 != ''
ORDER BY Category_level_1 ASC;
ISSUE: a)所以工会运作良好,我得到了我的价值观。 DONE b)Total subselect虽然没有正确分组。 我只想要计算返回的所有行,但是它的分组是行标题的计数而不是所有行。
因此,试图弄清楚如何解决这个问题应该有效,而SQL可能与答案完全不同:
Joint Category | Total Count of offers
Browns | 3
White | 3
Greens | 2
Yellow | 2
答案 0 :(得分:1)
<强>计划强>
- 将所有不同类别联合起来,别名为
Option Explicit Private Sub Command1_Click() Form2.Text1.Text = "Parth" End Sub Private Sub Command2_Click() Form2.Show vbModal, Me 'Since we are the owner, Form2 unloads when we do. End Sub
- 聚合计数超过
分组Option Explicit Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If UnloadMode = vbFormControlMenu Then Cancel = True Hide End If End Sub
(其中不为空或空白 - 如果这些字段为空或空白,则无法从渲染中清除..) 按Joint Category
<强>查询强>
Joint Category
<强>输出强>
Joint Category
<强> sqlfiddle 强>
答案 1 :(得分:1)
您的结果有点令人困惑。 。 。我不知道为什么棕色和白色都有3个数。我认为你在计算水平和类别的组合。
我倾向于使用union all
来解决此问题,然后使用count()
或count(distinct)
,具体取决于计数逻辑的实际情况。对于级别和类别的组合:
SELECT cat, COUNT(DISTINCT level, title) as numtitles
FROM ((SELECT title, 1 as level, category_level1 as cat FROM a_table) union all
(SELECT title, 2 as level, category_level2 as cat FROM a_table) union all
(SELECT title, 3 as level, category_level3 as cat FROM a_table)
) tc
WHERE cat is not null
GROUP BY cat;
您可以在每个子查询中包含日期列,然后在WHERE
子句中包含条件。