我有这个查询(有效):
SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM,
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti
inner join periti on appuntamenti.id_perito = periti.id
inner join zone on appuntamenti.id_zona = zone.id
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = '77'
GROUP BY AMPM, PERITI) AS GIORNO1AM
union
SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM,
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti
inner join periti on appuntamenti.id_perito = periti.id
inner join zone on appuntamenti.id_zona = zone.id
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = '78'
GROUP BY AMPM, PERITI) AS GIORNO1AM
union
SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM,
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti
inner join periti on appuntamenti.id_perito = periti.id
inner join zone on appuntamenti.id_zona = zone.id
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = '79'
GROUP BY AMPM, PERITI) AS GIORNO1AM
order by NOME ASC
我想从查询中删除所有“联盟”,而在嵌套where子句的区域表中使用 id列。
类似:
SELECT p.id ,(SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM,
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti
inner join periti on appuntamenti.id_perito = periti.id
inner join zone on appuntamenti.id_zona = zone.id
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona = p.id
GROUP BY AMPM, PERITI) AS GIORNO1AM) AS RISULTATO
FROM zone p
但是...当我尝试此更改时,出现此错误:
1054-“ where子句”中的未知列“ p.id”
请帮助我:)
答案 0 :(得分:1)
我是否正确地看到,除appuntamenti.id_zona之外,并集的所有元素都相同?如果是这样,那行不通:
SELECT NOME, AMPM, GROUP_CONCAT(CONCAT(PERITI,' (',QTY,')') SEPARATOR ', ')periti FROM
(SELECT zone.nome, DATE_FORMAT(CONCAT(appuntamenti.data_inizio,' ',appuntamenti.ora_inizio), '%p') AMPM,
periti.sigla PERITI,COUNT(*) QTY FROM appuntamenti
inner join periti on appuntamenti.id_perito = periti.id
inner join zone on appuntamenti.id_zona = zone.id
where appuntamenti.data_inizio='2018-11-20' and appuntamenti.id_zona IN (77, 78,79)
GROUP BY AMPM, PERITI) AS GIORNO1AM
答案 1 :(得分:0)
通常,要检查子查询是否正常运行,应自行运行该子查询。
因此,在您的情况下,此查询应该成功:
from pyspark.sql.functions import *
df = spark.table("HIVE_DB.HIVE_TABLE")
df.agg(min(col("col_1")), max(col("col_1")), min(col("col_2")), max(col("col_2"))).show()
在上面的查询中,没有名为(SELECT zone.nome,
Date_format(Concat(appuntamenti.data_inizio, ' ',
appuntamenti.ora_inizio), '%p'
) AMPM,
periti.sigla PERITI,
Count(*) QTY
FROM appuntamenti
INNER JOIN periti
ON appuntamenti.id_perito = periti.id
INNER JOIN zone
ON appuntamenti.id_zona = zone.id
WHERE appuntamenti.data_inizio = '2018-11-20'
AND appuntamenti.id_zona = p.id
GROUP BY ampm,
periti)
的表。
我不确定您想要获得什么结果,SQL Fiddle会有所帮助:)
但是假设您要将子查询连接到外部表,则需要 INNER JOIN
p