【发布时间】:2014-09-12 08:47:11
【问题描述】:
我是 sql(以及任何类型的编码)的完全新手,但我正在尝试编写一个基本查询,该查询将按国家/地区返回 8 月 15 日之后首次登录的用户数,以及在第一次会话后第二天回来的用户数量。
我正在使用一个名为 events 的表,其中包括以下列: utc_timestamp、name、id 和一个 json 字符串,其中包含此事件的多个参数(如您所见,我正在使用它来检索会话编号和国家/地区)
当我运行此查询时,它显示“第 5 行:无法识别函数规范中 'SELECT' 'DISTINCT' 'id' 附近的输入”。我尝试在 select 和 DISTINCT 之间放置括号,但我仍然收到相同的错误消息。知道是什么原因造成的吗?
感谢你们的帮助
SELECT
get_json_object(json, '$. User_Country ') AS country
, COUNT(DISTINCT id) AS Users
, COUNT(
SELECT DISTINCT id
FROM events
WHERE EXISTS(
SELECT *
FROM events
WHERE name = "Logged_in"
AND utc_timestamp>(
(
SELECT utc_timestamp
FROM events
WHERE month = 201408
AND name = "Logged_in"
AND get_json_object(json, '$. Session_nb ') = 0
AND utc_timestamp > UNIXTIMESTAMP('2014-08-15 12:00:00')
) + INTERVAL '1 day'
)
)
) AS Retained1
FROM events
WHERE month = 201408
AND name = "Logged_in"
AND get_json_object(json, '$. Session_nb ') = 0
AND utc_timestamp > UNIXTIMESTAMP('2014-08-15 12:00:00')
GROUP BY (get_json_object(json, '$. User_Country '))
ORDER BY (get_json_object(json, '$. User_Country '))
【问题讨论】:
-
我喜欢您对“基本查询”的定义 :-) 您使用的是什么 DBMS:MySQL、MS SQL Server、PostgreSQL...?您可以编辑问题并添加标签。
-
是的,很抱歉,我只需要检查工具 faq 就可以看到它实际上是 hiveql。
-
如果在
EXISTS子查询中选择索引列,可能会获得更好的性能。像SELECT id FROM events这样的东西,而不是像你正在做的那样选择所有列(SELECT * FROM events)。在 MS SQL Server 中,我会使用SELECT '1' FROM events- 我不知道您的 RDBMS 是否支持它。 -
很高兴知道,我会这样做的,谢谢。