我知道在我的类似问题上有很多帖子,但我似乎无法找到适合我案例的解决方案,如下所示。
我添加了空列,以便列数匹配,我知道我需要在第一个选择中声明所有列。这就是问题所在。我不知道如何在第一个选择中包含COUNT列,该列对应于第二个选择中的COUNT。
感谢您的帮助。
首先选择:
SELECT brands.brand_id,
brands.brand,
models.model_id,
models.model,
segments.segment_id,
segments.segment,
versions.version_id,
versions.version,
versions.places,
versions.gearbox,
versions.doors,
prices.price
FROM versions
INNER JOIN models USING (model_id)
INNER JOIN segments USING (segment_id)
INNER JOIN brands USING (brand_id)
INNER JOIN prices USING(version_id)
WHERE price BETWEEN 200001 AND 225000
AND brands.active = 'Y'
AND models.active = 'Y'
AND versions.active = 'Y'
第二次选择:
SELECT Count(*) AS SafetyItems,
version_id,
NULL AS COL3,
NULL AS ....,
NULL AS COL12
FROM versiontrim
INNER JOIN trims USING(trim_id)
INNER JOIN versions USING(version_id)
INNER JOIN prices USING(version_id)
INNER JOIN models USING (model_id)
INNER JOIN brands USING (brand_id)
WHERE trimtype IN( 'sec', 'help' )
AND price BETWEEN 200001 AND 225000
AND brands.active = 'Y'
AND models.active = 'Y'
AND versions.active = 'Y'
GROUP BY version_id
首选的样本结果:
brand_id brand model_id model segment_id version_id price
58 Renault 11 Megane 4 44 209900
58 Renault 14 Scenic 5 54 209900
58 Renault 11 Megane 4 69 200900
71 Toyota 29 Yaris 2 214 200900
71 Toyota 30 Auri 4 216 207900
52 Nissan 58 Pick-up 14 282 209000
24 Ford 21 Focus 4 290 209000
我想要的第二个选择的示例结果已附加到上面(在价格列之后):
SafetyItems version_id
9 44
7 54
9 69
10 214
6 216
1 282
10 290
答案 0 :(得分:0)
我想您还希望在第一个NULL
语句中添加SELECT
列,该列与第二个COUNT
语句中的SELECT
列相对应。
只需在第一个NULL
中添加SELECT
列,就像在第二个SELECT
语句中一样,这应该没问题。并且不要忘记列的ALIAS
,因为UNION
使用第一个SELECT
的列名。
SELECT
NULL AS SafetyItems,
brands.brand_id,
brands.brand,
models.model_id,
models.model,
segments.segment_id,
segments.segment,
versions.version_id,
versions.version,
versions.places,
versions.gearbox,
versions.doors,
prices.price
FROM versions
INNER JOIN models
USING (model_id)
INNER JOIN segments
USING (segment_id)
INNER JOIN brands
USING (brand_id)
INNER JOIN prices
USING(version_id)
WHERE price BETWEEN 200001 AND 225000
AND brands.active='Y'
AND models.active='Y'
AND versions.active='Y'
但是,您需要在第二个NULL
中添加另一个SELECT
列,以匹配第一个SELECT
中的列数。希望这会对你有所帮助。
答案 1 :(得分:0)
我意识到我用错误的方法来解决这个问题。最初我认为我不能选择2作为选择1的COUNT的一部分。事实证明它是可能的,我设法在一些挣扎之后完成它。
感谢您的投入。请参阅以下解决方案:
SELECT brands.brand_id,
brands.brand,
models.model_id,
models.model,
segments.segment_id,
segments.segment,
versions.version_id,
versions.version,
versions.places,
versions.gearbox,
versions.doors,
prices.price,
COUNT(trimtype)
FROM versions
INNER JOIN models USING (model_id)
INNER JOIN segments USING (segment_id)
INNER JOIN brands USING (brand_id)
INNER JOIN prices USING(version_id)
INNER JOIN versiontrim USING(version_id)
INNER JOIN trims USING(trim_id)
WHERE price BETWEEN 200001 AND 210000
AND trimtype IN('sec', 'help')
AND brands.active = 'Y'
AND models.active = 'Y'
AND versions.active = 'Y'
GROUP BY version_id