我有兩個表格資訊和國籍是這樣的:
1) 表資訊:
| 身份證號(PK) | 名稱 | 國籍(varchar)接受多個國籍 |
|---|---|---|
| 1 | 約翰 | 1,2,3 |
| 2 | 卡米利亞 | 2,4 |
1) 表國籍:
| id(pk) 整數 | 設計 |
|---|---|
| 1 | 德語 |
| 2 | 火雞 |
| 3 | 阿爾及利亞 |
| 4 | 卡塔爾 |
我想得到這樣的輸出:
| 設計 | 數數 |
|---|---|
| 德語 | 1 |
| 火雞 | 2 |
| 阿爾及利亞 | 1 |
| 卡塔爾 | 1 |
所以為此我嘗試了這樣的事情(但它沒有幫助):
$total_nationalite = DB::table('infos')
->select('desig', 'nationalities.id',DB::raw('COUNT(*) as count'))
->join('nationalities', DB::raw('CAST(nationalities.id as varchar)'), '=', 'infos.nationality')
->groupBy('desig','nationalities.id')
->get();
請使用查詢構建器或postgres 中的簡單查詢提出任何建議。
uj5u.com熱心網友回復:
在nationality欄位中使用逗號分隔的值文本串列是一個壞主意。有一個整數陣列或 - 更好 - 標準化設計。無論如何,這是一個本機查詢解決方案。
select desig, count(*) count
from
(
select unnest(string_to_array(nationality, ','))::integer nat_id
from infos
) t
join nationalities n on t.nat_id = n.id
group by desig;
資料庫小提琴
| 設計 | 數數 |
|---|---|
| 德語 | 1 |
| 卡塔爾 | 1 |
| 阿爾及利亞 | 1 |
| 火雞 | 2 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391455.html
標籤:sql 拉拉维尔 PostgreSQL的 laravel-8 查询生成器
